Crate sparse_bin_mat[][src]

A sparse implementation of a binary matrix optimized for row operations.

The main objects of this crate are matrices and vectors. All elements in a binary matrix or vector are element of the binary field GF2. That is, they are either 0 or 1 and addition is modulo 2.

Quick start

To instanciate a matrix, you need to specify the number of columns as well as the position of 1 in each rows.

use sparse_bin_mat::SparseBinMat;

// This is the matrix
// 1 0 1 0 1
// 0 1 0 1 0
// 0 0 1 0 0
let matrix = SparseBinMat::new(5, vec![vec![0, 2, 4], vec![1, 3], vec![2]]);

It is easy to access elements or rows of a matrix. However, since the matrix are optimized for row operations, you need to transpose the matrix if you want to perform column operations.

let matrix = SparseBinMat::new(5, vec![vec![0, 2, 4], vec![1, 3], vec![2]]);
assert_eq!(matrix.row(1).unwrap().as_slice(), [1, 3].as_ref());
assert_eq!(matrix.get(0, 0), Some(1));
assert_eq!(matrix.get(0, 1), Some(0));
// The element (0, 7) is out of bound for a 3 x 5 matrix.
assert_eq!(matrix.get(0, 7), None);

Addition and multiplication are implemented between matrix references.

let matrix = SparseBinMat::new(3, vec![vec![0, 1], vec![1, 2], vec![0, 2]]);
let identity = SparseBinMat::identity(3);

let sum = SparseBinMat::new(3, vec![vec![1], vec![2], vec![0]]);
assert_eq!(&matrix + &identity, sum);

assert_eq!(&matrix * &identity, matrix);

Many useful operations and decompositions are implemented. These include, but are not limited to

Operations are implemented as I need them, feel welcome to raise an issue if you need a new functionnality.

Modules

error

Error types for matrix and vector operations.

Structs

NonTrivialElements

An iterator over the coordinates of non trivial elements.

NonTrivialPositions

An iterator over all non trivial positions of a sparse binary vector.

Rows

An iterator over the rows of matrix.

SparseBinMat

A sparse binary matrix optimized for row operations.

SparseBinVecBase

A sparse binary vector.

Type Definitions

SparseBinSlice
SparseBinVec