| Crates.io | linxal |
| lib.rs | linxal |
| version | 0.6.0 |
| created_at | 2016-11-02 08:16:28.516135+00 |
| updated_at | 2017-04-17 01:11:28.170857+00 |
| description | Linear Algebra package with rust-ndarray interface |
| homepage | |
| repository | https://github.com/masonium/linxal |
| max_upload_size | |
| id | 7108 |
| size | 172,972 |
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.
linxal is available on crates.io and can be installed via cargo. In your Cargo.toml file, you can use.
[dependencies]
....
linxal = "0.5"
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 can be found at https://github.masonium.io/rustdoc/linxal/.
#[macro_use]
extern crate linxal;
extern crate ndarray;
use linxal::types::{c32, LinxalMatrix};
use ndarray::{arr1, arr2};
fn main() {
let m = arr2(&[[1.0f32, 2.0],
[-2.0, 1.0]]);
let r = m.eigenvalues(false, false);
assert!(r.is_ok());
let r = r.unwrap();
let true_evs = arr1(&[c32::new(1.0, 2.0), c32::new(1.0, -2.0)]);
assert_eq_within_tol!(true_evs, r.values, 0.01);
let b = arr1(&[-1.0, 1.0]);
let x = m.solve_linear(&b).unwrap();
let true_x = arr1(&[-0.6, -0.2]);
assert_eq_within_tol!(x, true_x, 0.0001);
}
Correctness: linxal will strive for correctness in all cases. Any
function returning a non-Err result should return a correct
result.
Ease of Use: linxal will 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.
linxal will minimize surprising behaviour.
Documentation: linxal will strive to provide documentation for all
functionality. Undocumented public features are a bug.
Ergonomics: linxal will try to minimize boilerplate whenever
appropriate.
Speed
Low-dimension arithmetic: linxal is 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
as nalgebra
and cgmath that specialize in
low-dimensional algorithms.
Representation flexibility: ndarray is the only for standard
matrices, and future representations of specialized formats (packed
triangular, banded, tridiagonal, etc.) will probably not allow for
user-defined formats.
ndarray)Pull requests of all kinds (code, documentation, formatting, spell-checks) are welcome!