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.Adjoint
 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…