初始化Julia中的数组
我正在尝试创建一个包含两个数组的数组。然而,初始化Julia中的数组,julia,Julia,我正在尝试创建一个包含两个数组的数组。然而,a=[[1,2],[3,4]]并不能做到这一点,它实际上包含了数组。朱莉娅也是如此:[[1,2],[3,4]==[1,2,3,4]。有什么想法吗 作为临时解决方法,我使用push!(按!(数组{Int,1}[],a),b)您可能需要一个矩阵: julia> a = [1 2; 3 4] 2x2 Int64 Array: 1 2 3 4 也许是一个元组: julia> a = ([1,2],[3,4,5]) ([1,2],[3,4,
a=[[1,2],[3,4]]
并不能做到这一点,它实际上包含了数组。朱莉娅也是如此:[[1,2],[3,4]==[1,2,3,4]
。有什么想法吗
作为临时解决方法,我使用
push!(按!(数组{Int,1}[],a),b)
您可能需要一个矩阵:
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])
如果您想要数组而不是矩阵(即二维
数组
):
通过将类型放在
[]
前面,可以参数化数组
文本(指定元素的类型)。因此,这里我们使用数组
类型参数化数组
文本。这改变了文字声明中括号的解释。你也可以做{[1,2],[3,4]}
,它创建一个数组{Any,1}
,包含[1,2]
和[3,4]
而不是数组{T,N},1}
数组{{T,N},1}
(或数组{Array{Int64,N},1}
,如果您将类型放在[]
)前面。如果您想要更强类型的对象,例如Int向量向量(即数组{Array{Int64,1},1}
),请使用以下命令:
a = Vector{Int}[ [1,2], [3,4] ]
有关构造
Array
类型的数组的一般回答:
a = Array[ [1,2], [3,4] ]
在朱丽亚中,可以有一个数组来保存其他数组类型对象。请考虑下面的初始化各种数组类型的例子:
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
指定数组中数组的特定维度
虽然我们可以指定一个数组将包含Array类型的元素,并且我们可以指定,例如,这些元素应该是二维数组,但是我们不能直接指定这些元素的维数。例如,我们不能直接指定一个数组包含10个数组,每个数组都是5,5。我们可以从syn中看到这一点用于构造数组的Array()
函数的税:
数组{T}(dims)
构造元素类型为T的未初始化密集数组。dims可以是元组或一系列整数参数。语法数组(T,dims)也可用,但不推荐使用
Julia中数组的类型包含维度的数量,但不包含维度的大小。因此,在该语法中没有位置指定精确的维度。不过,使用数组理解可以实现类似的效果:
E = [Array{Float64}(5,5) for idx in 1:10]
在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"
对于那些想知道的人来说,在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
我原以为
{}
是为地图设计的,但我试过了,发现它确实像你说的那样。这里发生的事情比我意识到的要多得多!{…}
在Julia v0.4中被弃用。@DavidP.Sanders这句语法被什么替换了?在将来(希望是v0.5),它将是你想写的,[[1,2],[3,4]],即向量向量。(在Julia v0.3中,语法将两个数组连接成一个包含4个元素的数组。这在v0.4中也被弃用。连接现在使用“;”:[[1,2];[3,4]]给出[1,2,3,4]。)目前,最好的选择是vector{Int}[[1,2],[3,4]
Julia C=array{array{Float64}}(10)错误:MethodError:没有方法匹配数组{Array{Float64,N}其中N,N}其中N(::Int64)最近的候选对象是:Array{Array{Float64,N}其中N,N}其中N(::UndeInitializer,::Int64)其中T在引导时。jl:408 Array{Array{Float64,N}其中N,N}其中N(::UndeInitializer,::Int64,::Int64)其中T在引导时。jl 409 Array{Float64,N}其中N,N}其中N(::未定义初始值设定项,::Int64,::Int64,::Int64)其中T在boot.jl:410。。。