Difference between Array and Vector

Vector is an alias for a one-dimensional Array. You can see that in the Julia REPL:

julia> Vector
Array{T, 1} where T

julia> Vector{Int32}
Array{Int32, 1}

Similarly, a Matrix is a 2-dimensional Array:

julia> Matrix
Array{T,2} where T

The difference is that Vector is a 1-dimensional Array, so when you write e.g. Vector{Int} it is a shorthand to Array{Int, 1}:

julia> Vector{Int}
Array{Int64,1}

When you call constructors Array([1,2,3]) and Vector([1,2,3]) they internally get translated to the same call Array{Int,1}([1,2,3]) as you passed a vector to them.

You would see the difference if you wanted to pass an array that is not 1-dimensional:

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})

Also note the effect of:

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

So essentially the call Vector(x) makes a copy of x. Usually in the code you would probably simply write copy(x).

A general rule is that Array is a parametric type that has two parameters given in curly braces:

  • the first one is element type (you can access it using eltype)
  • the second one is the dimension of the array (you can access it using ndims)

See https://docs.julialang.org/en/v1/manual/arrays/ for details.

Tags:

Julia