Julia's Extended Sparse Array Interface
The following ArrayInterface functions extend Julia's Base LinearAlgebra interface to improve the ability to do sparse linear algebra.
Sparse Indexing
These routines allow for improving sparse iteration and indexing.
ArrayInterface.isstructured
— Functionisstructured(::Type{T}) -> Bool
Query whether a type is a representation of a structured matrix.
ArrayInterface.findstructralnz
— Functionfindstructralnz(x::AbstractArray)
Return: (I,J) #indexable objects Find sparsity pattern of special matrices, the same as the first two elements of findnz(::SparseMatrixCSC).
ArrayInterface.has_sparsestruct
— Functionhas_sparsestruct(x::AbstractArray) -> Bool
Determine whether findstructralnz
accepts the parameter x
.
Matrix Coloring
Many routines require calculating the coloring of a matrix, such as for sparse differentation. The matrix_colors
function is the high level function which returns a color vector Vector{Int}
with the column colors. This function is overloaded for many special matrix types with analytical solutions for the matrix colors.
ArrayInterface.fast_matrix_colors
— Functionfast_matrix_colors(A)
Query whether a matrix has a fast algorithm for getting the structural colors of the matrix.
ArrayInterface.matrix_colors
— Functionmatrix_colors(A::Union{Array,UpperTriangular,LowerTriangular})
The color vector for dense matrix and triangular matrix is simply [1,2,3,..., Base.size(A,2)]
.
General Matrix Colors
For the general dispatch of matrix_colors
, see SparseDiffTools.jl for a full graph-based coloring algorithm which extends ArrayInterface.
Addtional Sparse Array Interface Tools
If dealing with general sparse arrays, consider:
- SparseDiffTools.jl: A general set of tools for extending calculus libraries for sparse optimizations.
- LinearSolve.jl: An extended linear solving library with support for generic sparse arrays.