如何用正确的维度初始化矩阵矩阵?

时间:2016-08-09 10:48:36

标签: julia

我想创建一个n x m维度矩阵k x k - 维度矩阵(包含零)。

我怎么能在朱莉娅那样做?

3 个答案:

答案 0 :(得分:6)

n-d理解可能最简单:

[zeros(k,k) for i=1:n, j=1:m]

更新:你需要在这里小心:大概你想用不同的零矩阵填充数组:其他提议的解决方案(fillrepmat)将实际上给你一个数组,其中所有条目都是相同的零矩阵,例如:

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)