ndarray-linalg

crate docs.rs

Linear algebra package for Rust with ndarray based on external LAPACK implementations.

Examples

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:

sh cargo run --example solve --features=openblas

and run all tests of ndarray-linalg with OpenBLAS

sh cargo test --features=openblas

Backend Features

There are three LAPACK source crates:

ndarray_linalg must link just one of them for LAPACK FFI.

toml [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 |

For library developer

If you creating a library depending on this crate, we encourage you not to link any backend:

toml [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

Tested Environments

Only x86_64 system is supported currently.

|Backend | Linux | Windows | macOS | |:--------|:-----:|:-------:|:-----:| |OpenBLAS |✔️ |- |- | |Netlib |✔️ |- |- | |Intel MKL|✔️ |✔️ |✔️ |

Generate document with KaTeX

You need to set RUSTDOCFLAGS explicitly:

shell 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:

toml [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.

License

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.