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
There are three LAPACK source crates:
ndarray_linalg
must link just one of them for LAPACK FFI.
[dependencies]
ndarray = "0.14"
ndarray-linalg = { version = "0.13", features = ["openblas-static"] }
Supported features are following:
Feature | Link type | Requirements | Description |
---|---|---|---|
openblas-static | static | gcc, gfortran, make | Build OpenBLAS in your project, and link it statically |
openblas-system | dynamic/static | libopenblas-dev | Seek OpenBLAS in system, and link it |
netlib-static | static | gfortran, make | Same as openblas-static except for using reference LAPACK |
netlib-system | dynamic/static | liblapack-dev | Same as openblas-system except for using reference LAPACK |
intel-mkl-static | static | (pkg-config) | Seek static library of Intel MKL from system, or download if not found, and link it statically |
intel-mkl-system | dynamic | (pkg-config) | Seek shared library of Intel MKL from system, and link it dynamically |
- You must use just one feature of them.
dynamic/static
means it depends on what is found in the system. When the system has/usr/lib/libopenblas.so
, it will be linked dynamically, and/usr/lib/libopenblas.a
will be linked statically. Dynamic linking is prior to static linking.- Requirements notices:
gcc
andgfortran
can be another compiler, e.g.icc
andifort
.libopenblas-dev
is package name in Debian, Ubuntu, and other derived distributions. There are several binary packages of OpenBLAS, i.e.libopenblas-{openmp,pthread,serial}-dev
. It can be other names in other distributions, e.g. Fedora, ArchLinux, and so on.pkg-config
is used for searching Intel MKL packages in system, and it is optional. See intel-mkl-src/README.md for detail.
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"
The cargo's feature is additive. If your library (saying lib1
) set a feature openblas-static
,
the application using lib1
builds ndarray_linalg with openblas-static
feature though they want to use intel-mkl-static
backend.
See the cargo reference for detail
Only x86_64 system is supported currently.
Backend | Linux | Windows | macOS |
---|---|---|---|
OpenBLAS | ✔️ | - | - |
Netlib | ✔️ | - | - |
Intel MKL | ✔️ | ✔️ | ✔️ |
You need to set RUSTDOCFLAGS
explicitly:
RUSTDOCFLAGS="--html-in-header katex-header.html" cargo doc --no-deps
This only works for --no-deps
build because katex-header.html
does not exists for dependent crates.
If you wish to set RUSTDOCFLAGS
automatically in this crate, you can put .cargo/config:
[build]
rustdocflags = ["--html-in-header", "katex-header.html"]
But, be sure that this works only for --no-deps
. cargo doc
will fail with this .cargo/config
.
CAUTION Be sure that if you use intel-mkl-src
backend, you have to accept Intel Simplified Software License
in addition to the MIT-License or Apache-2.0 License.
Dual-licensed to be compatible with the Rust project. Licensed under the Apache License, Version 2.0 http://www.apache.org/licenses/LICENSE-2.0 or the MIT license http://opensource.org/licenses/MIT, at your option.