Array
和Vector
之间有区别吗?
typeof(Array([1,2,3]))
Vector{Int64}
typeof(Vector([1,2,3]))
Vector{Int64}
两者似乎都可以创建相同的东西,但是它们并不相同:
Array == Vector
false
Array === Vector
false
所以,实际上有什么区别?
[区别在于Vector
是一维Array
,因此当您编写例如Vector{Int}
是Array{Int, 1}
的简写:
julia> Vector{Int}
Array{Int64,1}
[当您向构造函数Array([1,2,3])
和Vector([1,2,3])
调用时,如果将向量传递给它们,它们内部就会转换为相同的调用Array{Int,1}([1,2,3])
。
如果您要传递非一维数组,您会发现区别:
julia> Array(ones(2,2))
2×2 Array{Float64,2}:
1.0 1.0
1.0 1.0
julia> Vector(ones(2,2))
ERROR: MethodError: no method matching Array{T,1} where T(::Array{Float64,2})
还请注意:
julia> x=[1,2,3]
3-element Array{Int64,1}:
1
2
3
julia> Vector(x)
3-element Array{Int64,1}:
1
2
3
julia> Vector(x) === x
false
因此,呼叫Vector(x)
本质上是x
的副本。通常,在代码中,您可能会简单地写copy(x)
。
一般规则是,Array
是参数类型,具有用花括号括起来的两个参数:
eltype
进行访问]ndims
访问它)