数组与向量之间的差异

问题描述 投票:1回答:1

ArrayVector之间有区别吗?

typeof(Array([1,2,3]))
Vector{Int64}

typeof(Vector([1,2,3]))
Vector{Int64}

两者似乎都可以创建相同的东西,但是它们并不相同:

Array == Vector
false

Array === Vector
false

所以,实际上有什么区别?

julia
1个回答
2
投票

[区别在于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访问它)
© www.soinside.com 2019 - 2024. All rights reserved.