【发布时间】:2019-07-29 20:18:08
【问题描述】:
我想在 julia.xml 中用整数填充一个数组数组。以下作品:
a = Array{Int64}[]
push!(a, [1,2,3])
但这不是:
a = Array{Array{Int64}}[]
push!(a, [1, 2, 3])
错误是:MethodError: Cannot `convert` an object of type Int64 to an object of type Array{Int64,N} where N
有人可以解释为什么吗?似乎Array{Array{Int64}} 应该是数组的类型,其元素是包含 Int64 值的数组,而Array{Int64} 是整数数组。然而a = Array{Int64}[] 似乎初始化了一个包含整数而不是整数数组的数组数组?有人可以澄清这里的逻辑吗?
【问题讨论】:
-
我相信你想要追加而不是推送。
-
简单的解释是
T[]创建了一个空的Vector{T}。所以Array{Int}[]创建了一个Vector{Array{T}}。请注意,您应该不使用Array{T}。始终改用Vector{T},或者指定维数,如Array{Int, 1}。我的建议:总是使用Vector{T}和Matrix{T}而不是Array{T, 1}和Array{T, 2}。 从不使用Array{T},它会创建一个抽象类型。 -
@DNF 数组的抽象类型是什么意思?文档说
Julia provides the Vector and Matrix constructor functions, but these are simply aliases for uninitialized one and two dimensional arrays-Vector不是Array的别名吗?[1,2,3]的默认类型是数组。 -
是的,
Vector{T}是Array{T, 1}的别名,Matrix{T}是Array{T,2}的别名。问题是人们总是忘记指定维度,而是写Array{T}。这是一个抽象类型,因为它是元素类型为T的所有维度的所有数组的联合。编写Vector或Matrix可确保您不会忘记维度,并使您的代码更具可读性。