创建未指定(变化)大小的二维数组

时间:2014-05-23 10:03:16

标签: arrays julia

新手问题:我想动态创建一个整数二维数组M[i,j],其大小(两个维度)都是事先未知的。此外,对于每个索引i,第i行的大小可以变化。

问题1:如何声明这样的数组(我是否必须)?我在this hint和其他人中尝试了Array[]Array(Int64,1...)Array((Int,Int),0)

问题2:一旦创建,如何以智能和简洁的方式填充数组?假设我的第i行假设等于给定的1维B,我想写一下

A[i] = B

A[i,:] = B

甚至

A[i,1:n] = B

其中n的大小为B。所有这些都给了我一个BoundsError()。切片可以做到这一点,但我不能同意我的宣言。

1 个答案:

答案 0 :(得分:5)

这里不需要2D数组,因为在2D数组中,所有行的大小都相同。相反,你想要一个矢量矢量。例如:

A = Array(Vector{Int}, 5)
A[1] = rand(1:10, 3)
A[2] = rand(1:100, 22)

如果你检查A,你会看到类似的内容:

julia> A
5-element Array{Array{Int64,1},1}:
    [5,7,7]                                                        
    [1,63,40,86,61,39,98,5,68,97  …  78,49,44,89,48,63,90,90,86,83]
 #undef                                                            
 #undef                                                            
 #undef

另一个很棒的工具是使用理解:

julia> A = Vector{Int}[ [1:m] for m = 1:5]
5-element Array{Array{Int64,1},1}:
 [1]        
 [1,2]      
 [1,2,3]    
 [1,2,3,4]  
 [1,2,3,4,5]

您需要注意的主要事项是A的每个元素都是向量的引用;如果你指定

A[1] = b
A[2] = b

然后对b的任何更改都会影响 A[1]A[2]。如果您不想这样,请使用

A[1] = copy(b)
A[2] = copy(b)