ndarray-linalg 0.1.5

Linear algebra package for rust-ndarray using LAPACK
Documentation

extern crate ndarray;
extern crate ndarray_linalg;
extern crate ndarray_rand;
extern crate rand;
extern crate float_cmp;

use ndarray::prelude::*;
use ndarray_linalg::prelude::*;
use rand::distributions::*;
use ndarray_rand::RandomExt;
use float_cmp::ApproxEqRatio;

fn approx_eq(val: f64, truth: f64, ratio: f64) {
    if !val.approx_eq_ratio(&truth, ratio) {
        panic!("Not almost equal! val={:?}, truth={:?}, ratio={:?}",
               val,
               truth,
               ratio);
    }
}

fn random_hermite(n: usize) -> Array<f64, Ix2> {
    let r_dist = Range::new(0., 1.);
    let a = Array::<f64, _>::random((n, n), r_dist);
    a.dot(&a.t())
}

#[test]
fn deth() {
    let a = random_hermite(3);
    let (e, _) = a.clone().eigh().unwrap();
    let deth = a.clone().deth().unwrap();
    let det_eig = e.iter().fold(1.0, |x, y| x * y);
    approx_eq(deth, det_eig, 1.0e-7);
}