linxal
Status
Description
linxal is a linear algebra package for rust. linxal uses LAPACK as a
backend, (specifically with the lapack package) to execute linear
algebra routines with rust-ndarray as inputs and outputs.
Installation / Usage
linxal is available on crates.io and can be installed via cargo. In your Cargo.toml file, you can use.
[dependencies]
....
linxal = "0.5"
Features
linxal exposes features to choose the underlying LAPACK / BLAS
source. By default, linxal enables the openblas feature, which
compiles LAPACK and BLAS from the OpenBLAS
distribution
via openblas-src. You can
use netlib LAPACK instead, via:
...
[dependencies.linxal]
version = "0.5"
default-features = false
features = ["netlib"]
Other possible features are openblas-system and
netlib-system. These are similar to openblas and netlib, execpt
that they use the installed shared libraries on your system instead of
compiling them from source.
Documentation
Documentation can be found at https://github.masonium.io/rustdoc/linxal/.
Example
extern crate linxal;
extern crate ndarray;
use ;
use ;
Priorities
-
Correctness:
linxalwill strive for correctness in all cases. Any function returning a non-Errresult should return a correct result. -
Ease of Use:
linxalwill provide a consistent interface and should require minimal setup. Most routine should be high-level and should require no knowledge of the underlying LAPACK routines.linxalwill minimize surprising behaviour. -
Documentation:
linxalwill strive to provide documentation for all functionality. Undocumented public features are a bug. -
Ergonomics:
linxalwill try to minimize boilerplate whenever appropriate. -
Speed
Non-Goals
-
Low-dimension arithmetic:
linxalis not specifically designed or optimized for {2,3,4}-D problems, as you would encounter in computer graphics, physics, or other domains. There are libraries such asnalgebraandcgmaththat specialize in low-dimensional algorithms. -
Representation flexibility:
ndarrayis the only for standard matrices, and future representations of specialized formats (packed triangular, banded, tridiagonal, etc.) will probably not allow for user-defined formats.
Goals
- Major linear algebra routines
- Eigenvalues
- Singular Value
- Linear Solvers
- Linear Least-Squares
- Matrix Factorizations (QR, LU, etc.)
- QR
- LU
- Cholesky
- Schur
- Inversion
- Generalized Eigenvalues
- Generalized Singular Value Decomposition
- Multiple matrix formats
- General (direct via
ndarray) - Symmetric / Hermitian
- Banded (Packed)
- General (direct via
- Random matrix generation
- General
- Symmetric / Hermitian
- Positive
- Unitary
Contributing
Pull requests of all kinds (code, documentation, formatting, spell-checks) are welcome!