31

我正在尝试创建一个包含两个数组的数组。但是,a = [[1, 2], [3, 4]]并没有这样做,它实际上连接了数组。这在 Julia 中是正确的:[[1, 2], [3, 4]] == [1, 2, 3, 4]. 任何的想法?

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

4

7 回答 7

23

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

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

您可以Array通过将类型放在[]. 所以在这里我们用类型参数化Array文字Array。这改变了文字声明中括号的解释。

于 2013-12-06T00:14:41.193 回答
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] ]
于 2014-11-21T05:15:15.727 回答
15

在 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"
于 2016-09-05T22:51:15.337 回答
9

有关构造类型数组的一般答案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我们指定元素必须是二维数组。因此,由于rand(3)不产生二维数组,我们不能使用它来为特定元素赋值D

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

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

数组{T}(暗淡)

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

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

E = [Array{Float64}(5,5) for idx in 1:10]
于 2016-09-05T17:13:50.847 回答
3

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

Array{Array{Float64,1},2}(undef, 10,10)  #creates a two-dimensional array, ten rows and ten columns 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
于 2019-01-22T15:23:11.273 回答
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])
于 2013-12-05T22:51:37.963 回答
2

您也可以这样做{[1,2], [3,4]},它会创建一个Array{Any,1}包含[1,2]and[3,4]而不是Array{Array{T,N},1}.

于 2014-10-05T23:20:14.730 回答