数组数组 - 属性和构造

在 Julia 中,你可以拥有一个包含其他 Array 类型对象的 Array。考虑以下初始化各种类型的数组的示例:

A = Array{Float64}(10,10)  # A single Array, dimensions 10 by 10, of Float64 type objects

B = Array{Array}(10,10,10)  # A 10 by 10 by 10 Array.  Each element is an Array of unspecified type and dimension.

C = Array{Array{Float64}}(10)  ## A length 10, one-dimensional Array.  Each element is an Array of Float64 type objects but unspecified dimensions

D = Array{Array{Float64, 2}}(10)  ## A length 10, one-dimensional Array.  Each element of is an 2 dimensional array of Float 64 objects

例如,考虑 C 和 D 之间的差异:

julia> C[1] = rand(3)
3-element Array{Float64,1}:
 0.604771
 0.985604
 0.166444

julia> D[1] = rand(3)
ERROR: MethodError: 

rand(3) 生成 Array{Float64,1} 类型的对象。由于 C 元素的唯一规范是它们是具有 Float64 类型元素的数组,因此这符合 C 的定义。但是,对于 D,我们指定元素必须是 2 维数组。因此,由于 rand(3) 不产生二维数组,我们不能用它来为 D 的特定元素赋值。

指定数组中数组的特定维度

虽然我们可以指定一个 Array 将包含 Array 类型的元素,并且我们可以指定,例如那些元素应该是二维数组,但我们不能直接指定这些元素的尺寸。例如,我们不能直接指定我们想要一个包含 10 个数组的数组,每个数组为 5,5。我们可以从用于构造数组的 Array() 函数的语法中看到这一点:

阵列横置(变暗)

构造一个元素类型为 T 的未初始化的密集数组 .dims 可以是元组或一系列整数参数。语法 Array(T, dims)也可用,但已弃用。

Julia 中的数组类型包含维度的数量,但不包括这些维度的大小。因此,此语法中没有指定精确尺寸的位置。然而,使用数组理解可以实现类似的效果:

E = [Array{Float64}(5,5) for idx in 1:10]

注意:此文档反映了以下 SO 答案