新手问题:我想动态创建一个整数二维数组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()
。切片可以做到这一点,但我不能同意我的宣言。
答案 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)