lin_algebra
A Rust library for linear algebra.
Features
Operations are currently implemented for matrices over GF(2), with both explicit and bit-packed representations:
GF2Matrix: a standard explicit matrix representation over GF(2).PackedGF2Matrix: a compact bit-packed representation for improved memory usage and efficient bitwise operations.
Supported operations include:
- Compute the echelon form of a matrix along with the history of all row operations applied.
- Compute the rank of the linear application represented by a matrix.
- Compute the kernel of the linear application represented by a matrix.
- Compute the image of the linear application represented by a matrix.
- Solve systems of equations in GF(2).
- Convert between packed and explicit GF(2) matrix representations.
- Multiply a bit-packed matrix by a bit-packed vector.
Installation
Add the dependency to your Cargo.toml:
[]
= "0.4.1"
Usage
use GF2Matrix;
use MatrixTrait;
use ;
Matrix Representations
This crate currently provides two matrix representations over GF(2):
GF2Matrix: stores entries explicitly as0and1. This is easier to inspect and manipulate directly.PackedGF2Matrix<T>: stores each row as a packed unsigned integer type such asu8,u16,u32,u64, oru128. This is more compact and allows efficient XOR-based row operations.
Use GF2Matrix when clarity is more important.
Use PackedGF2Matrix when performance or memory efficiency matters.
License
MIT
Python bindings
Python bindings are provided in the separate project
gf2_lin_algebra.
They are intentionally limited to GF(2) and focus on performance and simplicity. The Rust crate lin_algebra is designed to be more general.
Roadmap
This project is under active development, with a focus on both research and practical use.
Current and planned directions include:
- improving the internal design of GF(2) matrices
- adding functionality for optimized bit-packed matrix representations
- generalizing the Rust core to support linear algebra over arbitrary fields
The Python bindings (gf2_lin_algebra) are intentionally limited to GF(2), while the Rust crate (lin_algebra) aims to be more general.
For a detailed list of planned improvements and areas where help is welcome, see ROADMAP.md.
Contributing
Contributions are welcome!
Please see CONTRIBUTING.md for guidelines.