Linear algebra package for Rust with ndarray based on external LAPACK implementations.
See examples directory.
Note: To run examples, you must specify which backend will be used (as described below). For example, you can execute the solve example with the OpenBLAS backend like this:
cargo run --example solve --features=openblas
and run all tests of ndarray-linalg with OpenBLAS
cargo test --features=openblas
Three BLAS/LAPACK implementations are supported:
- OpenBLAS
- needs
gfortran
(or other Fortran compiler)
- needs
- Netlib
- needs
cmake
andgfortran
- needs
- Intel MKL (non-free license, see the linked page)
There are three features corresponding to the backend implementations (openblas
/ netlib
/ intel-mkl
):
[dependencies]
ndarray = "0.13"
ndarray-linalg = { version = "0.12", features = ["openblas"] }
Backend | Linux | Windows | macOS |
---|---|---|---|
OpenBLAS | ✔️ | ❌ | ❌ |
Netlib | ✔️ | ❌ | ❌ |
Intel MKL | ✔️ | ✔️ | ✔️ |
If you creating a library depending on this crate, we encourage you not to link any backend:
[dependencies]
ndarray = "0.13"
ndarray-linalg = "0.12"
For the sake of linking flexibility, you can provide LAPACKE implementation (as an extern crate
) yourself.
You should link a LAPACKE implementation to a final crate (like binary executable or dylib) only, not to a Rust library.
[dependencies]
ndarray = "0.13"
ndarray-linalg = "0.12"
openblas-src = "0.7" # or another backend of your choice
You must add extern crate
to your code in this case:
extern crate ndarray;
extern crate ndarray_linalg;
extern crate openblas_src; // or another backend of your choice