陣列陣列 - 屬性和構造

在 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 答案