#faer #matrix #mdarray #matrix-math

mdarray-linalg-faer

Faer backend for mdarray-linalg

2 releases

Uses new Rust 2024

0.1.2 Nov 5, 2025
0.1.1 Oct 24, 2025

#2114 in Math

Download history 506/week @ 2025-12-18 191/week @ 2025-12-25 15/week @ 2026-01-01 17/week @ 2026-01-08 31/week @ 2026-02-26 10/week @ 2026-03-05 35/week @ 2026-03-12 833/week @ 2026-03-19 340/week @ 2026-03-26 71/week @ 2026-04-02

1,279 downloads per month
Used in 2 crates

MIT AND Apache-2.0

160KB
3K SLoC

use mdarray::{DTensor, tensor};
use mdarray_linalg::prelude::*; // Imports only traits
use mdarray_linalg::eig::EigDecomp;
use mdarray_linalg::svd::SVDDecomp;

use mdarray_linalg_faer::Faer;

// Declare two matrices
let a = tensor![[1., 2.], [3., 4.]];
let b = tensor![[5., 6.], [7., 8.]];

// ----- Matrix multiplication -----
let c = Faer.matmul(&a, &b).eval();
println!("A * B = {:?}", c);

// ----- Eigenvalue decomposition -----
// Note: we must clone `a` here because decomposition routines destroy the input.
let bd = Faer;
let EigDecomp {
    eigenvalues,
    right_eigenvectors,
    ..
} = bd.eig(&mut a.clone()).expect("Eigenvalue decomposition failed");

println!("Eigenvalues: {:?}", eigenvalues);
if let Some(vectors) = right_eigenvectors {
    println!("Right eigenvectors: {:?}", vectors);
}

// ----- Singular Value Decomposition (SVD) -----
let SVDDecomp { s, u, vt } = bd.svd(&mut a.clone()).expect("SVD failed");
println!("Singular values: {:?}", s);
println!("Left singular vectors U: {:?}", u);
println!("Right singular vectors V^T: {:?}", vt);

// ----- QR Decomposition -----
let (m, n) = *a.shape();
let mut q = DTensor::<f64, 2>::zeros([m, m]);
let mut r = DTensor::<f64, 2>::zeros([m, n]);

bd.qr_overwrite(&mut a.clone(), &mut q, &mut r); //
println!("Q: {:?}", q);
println!("R: {:?}", r);

The package provides Faer as a backend for mdarrray-linalg.

Dependencies

~9.5MB
~236K SLoC