在Julia中初始化一个数组数组

fhu*_*cho 30 julia

我正在尝试创建一个包含两个数组的数组.但是,a = [[1, 2], [3, 4]]不这样做,它实际上是对数组进行连接.朱莉娅也是如此:[[1, 2], [3, 4]] == [1, 2, 3, 4].任何的想法?

作为临时解决方法,我使用push!(push!(Array{Int, 1}[], a), b).

Sea*_*sey 22

如果你想要一个数组而不是矩阵(即2维Array):

a = Array[ [1,2], [3,4] ]
Run Code Online (Sandbox Code Playgroud)

您可以Array通过将类型放在前面来参数化(指定元素的类型)文字[].所以这里我们ArrayArray类型参数化文字.这会更改文字声明中括号的解释.


Jim*_*son 15

Sean Mackesey的回答会给你一些类型Array{Array{T,N},1}(或者Array{Array{Int64,N},1},如果你把类型放在前面[]).如果您想要更强类型的东西,例如Int(ie )的向量向量Array{Array{Int64,1},1},请使用以下代码:

a = Vector{Int}[ [1,2], [3,4] ]
Run Code Online (Sandbox Code Playgroud)


Dav*_*ers 13

在Julia v0.5中,原始语法现在产生了所需的结果:

julia> a = [[1, 2], [3, 4]]
2-element Array{Array{Int64,1},1}:
 [1,2]
 [3,4]

julia> VERSION
v"0.5.0"
Run Code Online (Sandbox Code Playgroud)


Mic*_*gge 8

有关构造类型数组的一般答案Array:

在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
Run Code Online (Sandbox Code Playgroud)

例如,考虑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: 
Run Code Online (Sandbox Code Playgroud)

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

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

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

阵列横置(变暗)

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

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

E = [Array{Float64}(5,5) for idx in 1:10]
Run Code Online (Sandbox Code Playgroud)

  • julia> C = Array{Array{Float64}}(10) 错误:MethodError:没有方法匹配 Array{Array{Float64,N} where N,N} where N(::Int64) 最接近的候选者是:Array{Array{Float64 ,N} where N,N} where N(::UndefInitializer, ::Int64) where T at boot.jl:408 Array{Array{Float64,N} where N,N} where N(::UndefInitializer, ::Int64 , ::Int64) where T at boot.jl:409 Array{Array{Float64,N} where N,N} where N(::UndefInitializer, ::Int64, ::Int64, ::Int64) where T at boot. jl:410 ... (2认同)