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

时间:2013-12-05 21:15:12

标签: julia

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

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

7 个答案:

答案 0 :(得分:22)

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

a = Array[ [1,2], [3,4] ]

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

答案 1 :(得分:15)

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

a = Vector{Int}[ [1,2], [3,4] ]

答案 2 :(得分:13)

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

<!DOCTYPE html> 
<html> 
<head lang=en> 
    <base href=.> 
    <meta charset=UTF-8> 
    <meta name=viewport content="width=device-width,initial-scale=1"> 
    <title>Bingo Transaction Processor Management</title> 
    <meta http-equiv=content-type content="text/html; charset=utf-8"/> 
    <meta name=viewport content="width=device-width,initial-scale=1"/> 

</head> 
<body> 
    <pm-app>Loading App...</pm-app> 
    <script src=/dist/polyfills.bundle.js>
    </script> <script src=/dist/vendor.bundle.js>
    </script> <script src=/dist/app.bundle.js></script> 
</body> 
</html>

答案 3 :(得分: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

例如,考虑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}(变暗)

     

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

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

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

答案 4 :(得分:2)

你可能想要一个矩阵:

julia> a = [1 2; 3 4]
2x2 Int64 Array:
 1  2
 3  4

也许是一个元组:

julia> a = ([1,2],[3,4,5])
([1,2],[3,4,5])

答案 5 :(得分:2)

您还可以{[1,2], [3,4]}创建Array{Any,1},其中包含[1,2][3,4]而不是Array{Array{T,N},1}

答案 6 :(得分:1)

对于那些想知道的人,在v0.7中,它非常相似:

Array{Array{Float64,1},2}(undef, 10,10)  #creates a two-dimensional array, ten rows and ten coloums where each element is an array of type Float64

Array{Array{Float64, 2},1}(undef,10) #creates a one-dimensional array of length ten, where each element is a two-dimensional array of type Float64