Which matrix types are defined?

Base Julia knows at least three types of vectors:

``````julia> x=rand(3)
3-element Vector{Float64}:
0.9378913600546382
0.04174077280647481
0.7608954281716017

julia> x'
1×3 adjoint(::Vector{Float64}) with eltype Float64:
0.937891  0.0417408  0.760895

julia> transpose(x)
1×3 transpose(::Vector{Float64}) with eltype Float64:
0.937891  0.0417408  0.760895
``````

What are commonly used types of matrices?

If you are asking to type function arguments, don’t worry: type them as `AbstractMatrix{T}`. This will be sufficiently flexible.

I don’t worry, I just want to explain the advantages of Julia to a colleague that uses Matlab, and I think one of the advantages is that you can write functions that are optimized for curtain matrix types, e.g. symmetric matrices, but I did not find a list of types that are defined…

EDIT: OK, found it: Linear Algebra · The Julia Language

Maybe also useful?

``````julia> subtypes(AbstractMatrix)
28-element Vector{Any}:
AbstractSlices{T, 2} where T
Base.ReinterpretArray{T, 2, S} where {T, S}
Base.ReshapedArray{T, 2} where T
Base.SCartesianIndices2
BitMatrix (alias for BitArray{2})
CartesianIndices{2, R} where R<:Tuple{OrdinalRange{Int64, Int64}, OrdinalRange{Int64, Int64}}
Core.Compiler.BitArray{2}
Core.Compiler.LinearIndices{2, R} where R<:Tuple{Core.Compiler.AbstractUnitRange{Int64}, Core.Compiler.AbstractUnitRange{Int64}}
DenseMatrix (alias for DenseArray{T, 2} where T)
LinearAlgebra.AbstractQ
LinearAlgebra.AbstractTriangular
LinearAlgebra.Bidiagonal
⋮
LinearAlgebra.LQPackedQ
LinearAlgebra.SymTridiagonal
LinearAlgebra.Symmetric
LinearAlgebra.Transpose
LinearAlgebra.Tridiagonal
LinearAlgebra.UpperHessenberg
LinearIndices{2, R} where R<:Tuple{AbstractUnitRange{Int64}, AbstractUnitRange{Int64}}
PermutedDimsArray{T, 2} where T
AbstractSparseMatrix (alias for SparseArrays.AbstractSparseArray{Tv, Ti, 2} where {Tv, Ti})
SparseArrays.CHOLMOD.FactorComponent
SparseArrays.ReadOnly{T, 2, V} where {T, V<:AbstractMatrix{T}}
SubArray{T, 2} where T
Test.GenericArray{T, 2} where T
``````
3 Likes

I am pretty sure Matlab has specialized matrices too.

Well, not really. While you can define classes in Matlab, matrices are not classes but a special build-in type.

Yes, you are right: the specializations are built-in types.

You might also want to point out that many packages have already implemented special matrix types. Here are just a few for example…

``````julia> using LinearAlgebra

julia> old_types = subtypes(AbstractMatrix); length(old_types)
28

julia> using BlockArrays, InfiniteArrays, StaticArrays, ToeplitzMatrices

julia> foreach(t ->  t ∉ old_types && println(t), subtypes(AbstractMatrix))
AbstractToeplitz
ArrayLayouts.LayoutMatrix
BlockArrays.BlockIndexRange{2, R} where R<:Tuple{AbstractUnitRange{Int64}, AbstractUnitRange{Int64}}
BlockArrays.BlocksView{S, 2, T, B} where {T<:(AbstractMatrix), S, B<:AbstractMatrix{S}}
BlockRange{2, R} where R<:Tuple{AbstractUnitRange{Int64}, AbstractUnitRange{Int64}}
FillArrays.AbstractFill{T, 2} where T
FillArrays.OneElement{T, 2} where T
FillArrays.RectDiagonal
Hankel
InfiniteArrays.ReshapedArray{T, 2} where T
StaticArrays.TrivialView{A, T, 2} where {A, T}
StaticArray{S, T, 2} where {S<:Tuple, T}
``````
1 Like

And I think you cannot specialize your own code on the inbuilt Matlab specialized matrices when writing your own Matlab functions. At least that’s my understanding…