我想创建一个n x m
维度矩阵k x k
- 维度矩阵(包含零)。
我怎么能在朱莉娅那样做?
答案 0 :(得分:6)
n-d理解可能最简单:
[zeros(k,k) for i=1:n, j=1:m]
更新:你需要在这里小心:大概你想用不同的零矩阵填充数组:其他提议的解决方案(fill
或repmat
)将实际上给你一个数组,其中所有条目都是相同的零矩阵,例如:
julia> k = 2; n = 3; m = 4; A = fill(zeros(k, k), n, m)
3×4 Array{Array{Float64,2},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; 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> A[1,1][1,1] = 1; A
3×4 Array{Array{Float64,2},2}:
[1.0 0.0; 0.0 0.0] [1.0 0.0; 0.0 0.0] [1.0 0.0; 0.0 0.0] [1.0 0.0; 0.0 0.0]
[1.0 0.0; 0.0 0.0] [1.0 0.0; 0.0 0.0] [1.0 0.0; 0.0 0.0] [1.0 0.0; 0.0 0.0]
[1.0 0.0; 0.0 0.0] [1.0 0.0; 0.0 0.0] [1.0 0.0; 0.0 0.0] [1.0 0.0; 0.0 0.0]
答案 1 :(得分:3)
我也使用这样的东西
Actor
答案 2 :(得分:1)
然而 - 另一个答案,补充上面已经很漂亮的那些。
repmat([zeros(k,k)], n,m)
(或更具语法灵活性的堂兄repeat([zeros(k,k)], outer=(n,m))
)
编辑:这似乎是迄今为止最快的方法
我将在下面列出基准:
k = 2; n = 3; m = 4
julia> @time for i in 1:10e4; A = repmat([zeros(k,k)], n,m); end
0.601392 seconds (2.80 M allocations: 112.915 MB, 1.49% gc time)
julia> @time for i in 1:10e4; A = fill(zeros(k,k), n,m); end
1.053698 seconds (200.00 k allocations: 27.466 MB, 0.13% gc time)
julia> @time for i in 1:10e4; A = repeat([zeros(k,k)], outer=(n,m)); end
1.217569 seconds (6.10 M allocations: 222.778 MB, 1.97% gc time)
julia> @time for i in 1:10e4; A = [zeros(k,k) for i=1:n, j=1:m]; end
8.217551 seconds (2.83 M allocations: 214.951 MB, 0.19% gc time)