SparseArrayKit.jl

Sparse multidimensional arrays using a DOK format, with support for TensorOperations.jl
Author Jutho
Popularity
30 Stars
Updated Last
3 Months Ago
Started In
October 2020

SparseArrayKit.jl

Build Status Coverage Quality assurance Downloads
CI Codecov Aqua QA SparseArrayKit Downloads

A Julia package for sparse multidimensional arrays, aimed particularly at the setting of very sparse and higher-dimensional arrays (e.g. tensor algebra). This is not a replacement nor a competitor to Julia's SparseArrays standard library and the SparseMatrixCSC format.

The current interface, which is subject to breaking changes, exports a type SparseArray{T,N} <: AbstractArray{T,N}. This type uses a hash table (Dict from Julia's Base, could change) to store keys (of type CartesianIndex{N}) and values (of type T) of the non-zero data (i.e. a dictionary-of-keys storage format), and is thus supposed to have O(1) access time for getting and setting individual values. Other storage formats for sparse arrays could in the future be experimented with.

SparseArray instances have a number of method definitions, mostly indexing, basic arithmetic and methods from the LinearAlgebra standard library. Aside from matrix multiplication, there are no specific matrix methods (such as matrix factorizations) and you are probably better off with SparseMatrixCSC from SparseArrays if your problem can be cast in terms of matrices and vectors. There is a fast conversion path from SparseMatrixCSC to SparseArray (but not yet the other way around).

Objects of type SparseArray are fully compatible with the interface from TensorOperations.jl, and thus with the @tensor macro for multidimensional tensor contractions.

There are only three new methods exported by this package, which are nonzero_keys, nonzero_values and nonzero_pairs which export iterators (not necessarily editable or indexable vectors) over the keys, values and key-value pairs of the nonzero entries of the array. These can be used to define new optimized methods.