参考了参考链接1中的案例,我们来测试一下julia执行简单的张量网络缩并的功能。关于张量网络计算的背景知识,这里用julia来计算张量网络的话会依赖于Einsum这个第三方包,需要我们来手动安装。首先我们测试一下直接调用这个包的指令,如果这个包已经被安装了,那么调用就不会报错:
1
2
3
4
5
6
julia> using Einsum
ERROR: ArgumentError: Package Einsum not found in current path:
- Run `import Pkg; Pkg.add("Einsum")` to install the Einsum package.
Stacktrace:
[1] run_repl(::REPL.AbstractREPL, ::Any) at /build/julia/src/julia-1.5.4/usr/share/julia/stdlib/v1.5/REPL/src/REPL.jl:288
这里我们发现系统中是没有这个库的,而这里调用的时候也已经提示了我们安装这个包的方法,我们可以尝试直接按照这个指令来安装:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
julia> import Pkg
julia> Pkg.add("Einsum")
Installing known registries into `~/.julia`
######################################################################## 100.0%
Added registry `General` to `~/.julia/registries/General`
Resolving package versions...
Installed Compat ─ v3.25.0
Installed Einsum ─ v0.4.1
Updating `~/.julia/environments/v1.5/Project.toml`
[b7d42ee7] + Einsum v0.4.1
Updating `~/.julia/environments/v1.5/Manifest.toml`
[34da2185] + Compat v3.25.0
[b7d42ee7] + Einsum v0.4.1
[2a0f44e3] + Base64
[ade2ca70] + Dates
[8bb1440f] + DelimitedFiles
[8ba89e20] + Distributed
[b77e0a4c] + InteractiveUtils
[76f85450] + LibGit2
[8f399da3] + Libdl
[37e2e46d] + LinearAlgebra
[56ddb016] + Logging
[d6f4376e] + Markdown
[a63ad114] + Mmap
[44cfe95a] + Pkg
[de0858da] + Printf
[3fa0cd96] + REPL
[9a3f8284] + Random
[ea8e919c] + SHA
[9e88b42a] + Serialization
[1a1011a3] + SharedArrays
[6462fe0b] + Sockets
[2f01184e] + SparseArrays
[10745b16] + Statistics
[8dfed614] + Test
[cf7118a7] + UUIDs
[4ec0a83e] + Unicode
安装过程没有什么问题,那我们再次调用看看:
1
2
julia> using Einsum
[ Info: Precompiling Einsum [b7d42ee7-0b51-5a75-98ca-779d3107e4c0]
调用没有问题,说明我们这个包是安装成功了。接下来正式测试一下张量网络缩并的案例:无损音乐下载
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
julia> A = zeros(5,6,7)
5×6×7 Array{Float64,3}:
[:, :, 1] =
0.0 0.0 0.0 0.0 0.0 0.0
0.0 0.0 0.0 0.0 0.0 0.0
0.0 0.0 0.0 0.0 0.0 0.0
0.0 0.0 0.0 0.0 0.0 0.0
0.0 0.0 0.0 0.0 0.0 0.0
[:, :, 2] =
0.0 0.0 0.0 0.0 0.0 0.0
0.0 0.0 0.0 0.0 0.0 0.0
0.0 0.0 0.0 0.0 0.0 0.0
0.0 0.0 0.0 0.0 0.0 0.0
0.0 0.0 0.0 0.0 0.0 0.0
[:, :, 3] =
0.0 0.0 0.0 0.0 0.0 0.0
0.0 0.0 0.0 0.0 0.0 0.0
0.0 0.0 0.0 0.0 0.0 0.0
0.0 0.0 0.0 0.0 0.0 0.0
0.0 0.0 0.0 0.0 0.0 0.0
[:, :, 4] =
0.0 0.0 0.0 0.0 0.0 0.0
0.0 0.0 0.0 0.0 0.0 0.0
0.0 0.0 0.0 0.0 0.0 0.0
0.0 0.0 0.0 0.0 0.0 0.0
0.0 0.0 0.0 0.0 0.0 0.0
[:, :, 5] =
0.0 0.0 0.0 0.0 0.0 0.0
0.0 0.0 0.0 0.0 0.0 0.0
0.0 0.0 0.0 0.0 0.0 0.0
0.0 0.0 0.0 0.0 0.0 0.0
0.0 0.0 0.0 0.0 0.0 0.0
[:, :, 6] =
0.0 0.0 0.0 0.0 0.0 0.0
0.0 0.0 0.0 0.0 0.0 0.0
0.0 0.0 0.0 0.0 0.0 0.0
0.0 0.0 0.0 0.0 0.0 0.0
0.0 0.0 0.0 0.0 0.0 0.0
[:, :, 7] =
0.0 0.0 0.0 0.0 0.0 0.0
0.0 0.0 0.0 0.0 0.0 0.0
0.0 0.0 0.0 0.0 0.0 0.0
0.0 0.0 0.0 0.0 0.0 0.0
0.0 0.0 0.0 0.0 0.0 0.0
julia> X = randn(5,2)
5×2 Array{Float64,2}:
-0.573591 0.550235
-0.893529 -1.25679
-0.338177 0.632082
-0.304742 2.67068
-0.171912 -0.714813
julia> Y = randn(6,2)
6×2 Array{Float64,2}:
-0.609149 -0.815229
0.199472 0.554751
-0.562527 0.259988
-1.65124 1.08916
-0.625242 -0.0391435
-0.943587 -0.695565
julia> Z = randn(7,2)
7×2 Array{Float64,2}:
0.311165 0.555719
-0.486201 -1.26421
-1.90713 0.738125
-1.26129 -0.274261
-0.570305 -0.295527
-0.182373 -0.0410972
-0.213648 -0.12244
julia> @einsum A[i,j,k] = X[i,r]*Y[j,r]*Z[k,r]
5×6×7 Array{Float64,3}:
[:, :, 1] =
-0.140556 0.134027 0.179899 0.627755 0.0996249 -0.0442743
0.738739 -0.442911 -0.0251791 -0.30159 0.201178 0.748148
-0.222257 0.173872 0.150518 0.556337 0.052044 -0.145031
-1.15216 0.804416 0.439202 1.77305 0.00119409 -0.942843
0.356423 -0.231037 -0.0731852 -0.344323 0.0489952 0.326778
[:, :, 2] =
0.397202 -0.330261 -0.337728 -1.21813 -0.147139 0.220694
-1.5599 0.968069 0.168698 1.01314 -0.333819 -1.51507
0.551277 -0.410494 -0.300243 -1.14183 -0.0715246 0.400667
2.66219 -1.84344 -0.96114 -3.92197 0.0395199 2.20862
-0.787613 0.517985 0.187925 0.846224 -0.0876327 -0.70743
[:, :, 3] =
-0.997453 0.443513 -0.509762 -1.36396 -0.699856 -1.3147
-0.281771 -0.174709 -1.19977 -3.82422 -1.02915 -0.962687
-0.773218 0.387471 -0.241501 -0.55681 -0.42151 -0.933083
-1.96108 1.20951 0.185581 1.18738 -0.440543 -1.91956
0.230419 -0.2273 -0.321604 -1.11604 -0.184337 0.0576331
[:, :, 4] =
-0.317672 0.0605948 -0.446202 -1.35898 -0.446433 -0.577685
-0.967509 0.416021 -0.544352 -1.48553 -0.718138 -1.30317
-0.118501 -0.0110862 -0.28501 -0.89313 -0.259904 -0.281897
0.362986 -0.329663 -0.406649 -1.43245 -0.211652 0.146789
-0.291903 0.152008 -0.0710035 -0.144515 -0.143245 -0.34096
[:, :, 5] =
-0.0667018 -0.0249559 -0.226291 -0.717264 -0.198165 -0.195562
-0.6132 0.307691 -0.190091 -0.436916 -0.333152 -0.73918
0.0347997 -0.0651548 -0.157056 -0.521917 -0.113275 -0.0520544
0.537557 -0.403173 -0.302962 -1.1466 -0.0777703 0.384987
-0.231936 0.136746 -0.000229789 0.0681898 -0.0695689 -0.239447
[:, :, 6] =
-0.0452868 0.00832171 -0.0647238 -0.197362 -0.06452 -0.0829776
-0.141371 0.0611584 -0.0782386 -0.212824 -0.103909 -0.189689
-0.0163919 -0.00210828 -0.0414473 -0.130132 -0.0375447 -0.0401267
0.0556227 -0.0498019 -0.0597991 -0.211314 -0.0304527 0.0239016
-0.0430469 0.0225507 -0.00999881 -0.0197739 -0.0207526 -0.0500169
[:, :, 7] =
-0.0197261 -0.0129295 -0.0864512 -0.275731 -0.0739839 -0.0687722
-0.241735 0.123445 -0.0673792 -0.147621 -0.125382 -0.287166
0.019081 -0.0285214 -0.0607641 -0.203596 -0.0421448 -0.0143435
0.226918 -0.168415 -0.12164 -0.463661 -0.0279081 0.166014
-0.0937235 0.0558792 0.00209385 0.0346776 -0.0263901 -0.0955337
在上面这个案例中,我们事先定义好了一个张量A
用于存放计算结果,如果我们不事先定义的话,就需要按照以下示例来使用:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
julia> @einsum B[i,j,k] := X[i,r]*Y[j,r]*Z[k,r]
5×6×7 Array{Float64,3}:
[:, :, 1] =
-0.140556 0.134027 0.179899 0.627755 0.0996249 -0.0442743
0.738739 -0.442911 -0.0251791 -0.30159 0.201178 0.748148
-0.222257 0.173872 0.150518 0.556337 0.052044 -0.145031
-1.15216 0.804416 0.439202 1.77305 0.00119409 -0.942843
0.356423 -0.231037 -0.0731852 -0.344323 0.0489952 0.326778
[:, :, 2] =
0.397202 -0.330261 -0.337728 -1.21813 -0.147139 0.220694
-1.5599 0.968069 0.168698 1.01314 -0.333819 -1.51507
0.551277 -0.410494 -0.300243 -1.14183 -0.0715246 0.400667
2.66219 -1.84344 -0.96114 -3.92197 0.0395199 2.20862
-0.787613 0.517985 0.187925 0.846224 -0.0876327 -0.70743
[:, :, 3] =
-0.997453 0.443513 -0.509762 -1.36396 -0.699856 -1.3147
-0.281771 -0.174709 -1.19977 -3.82422 -1.02915 -0.962687
-0.773218 0.387471 -0.241501 -0.55681 -0.42151 -0.933083
-1.96108 1.20951 0.185581 1.18738 -0.440543 -1.91956
0.230419 -0.2273 -0.321604 -1.11604 -0.184337 0.0576331
[:, :, 4] =
-0.317672 0.0605948 -0.446202 -1.35898 -0.446433 -0.577685
-0.967509 0.416021 -0.544352 -1.48553 -0.718138 -1.30317
-0.118501 -0.0110862 -0.28501 -0.89313 -0.259904 -0.281897
0.362986 -0.329663 -0.406649 -1.43245 -0.211652 0.146789
-0.291903 0.152008 -0.0710035 -0.144515 -0.143245 -0.34096
[:, :, 5] =
-0.0667018 -0.0249559 -0.226291 -0.717264 -0.198165 -0.195562
-0.6132 0.307691 -0.190091 -0.436916 -0.333152 -0.73918
0.0347997 -0.0651548 -0.157056 -0.521917 -0.113275 -0.0520544
0.537557 -0.403173 -0.302962 -1.1466 -0.0777703 0.384987
-0.231936 0.136746 -0.000229789 0.0681898 -0.0695689 -0.239447
[:, :, 6] =
-0.0452868 0.00832171 -0.0647238 -0.197362 -0.06452 -0.0829776
-0.141371 0.0611584 -0.0782386 -0.212824 -0.103909 -0.189689
-0.0163919 -0.00210828 -0.0414473 -0.130132 -0.0375447 -0.0401267
0.0556227 -0.0498019 -0.0597991 -0.211314 -0.0304527 0.0239016
-0.0430469 0.0225507 -0.00999881 -0.0197739 -0.0207526 -0.0500169
[:, :, 7] =
-0.0197261 -0.0129295 -0.0864512 -0.275731 -0.0739839 -0.0687722
-0.241735 0.123445 -0.0673792 -0.147621 -0.125382 -0.287166
0.019081 -0.0285214 -0.0607641 -0.203596 -0.0421448 -0.0143435
0.226918 -0.168415 -0.12164 -0.463661 -0.0279081 0.166014
-0.0937235 0.0558792 0.00209385 0.0346776 -0.0263901 -0.0955337
这里我们可以发现,julia的变量定义形式跟python是类似的,并不需要事先声明变量的具体类型。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。