数组和向量的区别

Geo*_*ery 14 julia

有没有之间的差异ArrayVector

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

typeof(Vector([1,2,3]))
Vector{Int64}
Run Code Online (Sandbox Code Playgroud)

两者似乎都创造了相同的东西,但它们并不相同:

Array == Vector
false

Array === Vector
false
Run Code Online (Sandbox Code Playgroud)

那么,实际上有什么区别呢?

Bog*_*ski 14

不同之处在于它Vector是一维的Array,因此当您编写例如时,Vector{Int}它是 的简写Array{Int, 1}

julia> Vector{Int}
Array{Int64,1}
Run Code Online (Sandbox Code Playgroud)

当您调用构造函数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})
Run Code Online (Sandbox Code Playgroud)

还要注意以下效果:

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
Run Code Online (Sandbox Code Playgroud)

所以基本上调用Vector(x)会复制x. 通常在代码中,您可能会简单地编写copy(x).

一般规则是它Array是一个参数类型,它有两个用大括号给出的参数:

  • 第一个是元素类型(您可以使用它访问它eltype
  • 第二个是数组的维度(您可以使用它访问它ndims

有关详细信息,请参阅https://docs.julialang.org/en/v1/manual/arrays/


小智 5

Vector是一维的别名Array。你可以在 Julia REPL 中看到:

julia> Vector
Array{T, 1} where T

julia> Vector{Int32}
Array{Int32, 1}
Run Code Online (Sandbox Code Playgroud)

类似地,aMatrix是一个二维数组:

julia> Matrix
Array{T,2} where T
Run Code Online (Sandbox Code Playgroud)