Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 创建未指定(变化)大小的二维数组_Arrays_Julia - Fatal编程技术网

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

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()。

新手问题:我想动态创建一个整数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()
。切片可能会起作用,但我不能让它与我的声明一致。

这里不需要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]
来访问这些值。