Arrays 创建未指定(变化)大小的二维数组
新手问题:我想动态创建一个整数2D数组Arrays 创建未指定(变化)大小的二维数组,arrays,julia,Arrays,Julia,新手问题:我想动态创建一个整数2D数组M[I,j],其大小(在两个维度中)事先未知。此外,对于每个索引i,第i行的大小可能不同 问题1:如何声明这样一个数组(我是否必须声明)?我尝试了Array[],Array(Int64,1…)和Array((Int,Int),0),就像在和其他人一样 问题2:创建后,如何以智能简洁的方式填充阵列?假设我的第i行等于给定的一维B,我想写 A[i] = B 或 甚至 A[i,1:n] = B 其中n是B的大小。所有这些都给了我一个BoundsError()。
M[I,j]
,其大小(在两个维度中)事先未知。此外,对于每个索引i
,第i行的大小可能不同
问题1:如何声明这样一个数组(我是否必须声明)?我尝试了Array[]
,Array(Int64,1…
)和Array((Int,Int),0)
,就像在和其他人一样
问题2:创建后,如何以智能简洁的方式填充阵列?假设我的第i行等于给定的一维B
,我想写
A[i] = B
或
甚至
A[i,1:n] = B
其中
n
是B
的大小。所有这些都给了我一个BoundsError()
。切片可能会起作用,但我不能让它与我的声明一致。这里不需要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)
这里不需要二维数组,因为在二维数组中,所有行的大小都相同。相反,您需要一个向量的向量。例如:
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)
你说“你想要一个向量的向量”,但对我来说就像你声明了一个向量数组。不过,我对julia中数组和向量之间的差异还不熟悉,所以可能我遗漏了一些东西。
Vector{T}
是Array{T,1}
的类型别名:请参阅。向量只是一维数组,仅此而已。谢谢tholy的澄清。这不仅有效,而且我对朱莉娅的理解也在不断进步。欢迎使用copy
警告!总之,这里重要的是使用向量的向量,而不是二维数组,二维数组的水平维度是固定的。我可以为读者补充一点,您可以通过键入A[I][j]
来访问这些值。您说过“您需要一个向量向量”,但我觉得这就像您声明了一个向量数组一样。不过,我对julia中数组和向量之间的差异还不熟悉,所以可能我遗漏了一些东西。Vector{T}
是Array{T,1}
的类型别名:请参阅。向量只是一维数组,仅此而已。谢谢tholy的澄清。这不仅有效,而且我对朱莉娅的理解也在不断进步。欢迎使用copy
警告!总之,这里重要的是使用向量的向量,而不是二维数组,二维数组的水平维度是固定的。我可以为读者补充一点,您可以通过键入A[I][j]
来访问这些值。