Skip to content


Folders and files

Last commit message
Last commit date

Latest commit


Repository files navigation

Numeric Rust

General-purpose N-dimensional matrix class for Rust. It links to OpenBLAS and LAPACK to make tensor operations fast (such as matrix multiplications and linear solvers). It utilizes Rust's move semantics as much as possible to avoid unnecessary copies.



Some of the completed and planned features:

  • Element-wise addition, subtraction, multiplication, division
  • Matrix multiplication and scalar product
  • Indexing
  • Slicing
  • Generic (anything from Tensor<bool> to Tensor<f64>)
  • Mathematical functions
  • Linear solver
  • Basic random number generation
  • Creation macro
  • Updating slices
  • Saving/loading HDF5
  • Strided slices
  • Broadcasted axes
  • Basic support for complex numbers
  • Singular Value Decomposition
  • Matrix inverse

Recent progress is summarized in For planned features, take a look at


extern crate numeric;

use numeric::Tensor;

fn main() {
    let a: Tensor<f64> = Tensor::range(6).reshape(&[2, 3]);
    let b = tensor![7.0, 3.0, 2.0; -3.0, 2.0, -5.0];
    let c = tensor![7.0, 3.0, 2.0];

    let d = &a + &b;         // a new tensor is returned
    println!("d = {}", d);

    let e =;       // matrix multiplication (returns a new tensor)
    println!("e = {}", e);

    let f = a + &b;          // a is moved (no new memory is allocated)
    println!("f = {}", f);

    // Higher-dimensional
    let g: Tensor<f64> = Tensor::ones(&[2, 3, 4, 5]);
    println!("g = {}", g);


d =
 7 4 4
 0 6 0
[Tensor<f64> of shape 2x3]
e =
  7 43
[Tensor<f64> of shape 2]
f =
 7 4 4
 0 6 0
[Tensor<f64> of shape 2x3]
g =
[Tensor<f64> of shape 2x3x4x5]


We love pull requests and there are tons of things to work on for this project. If you want suggestions for contributions, check out (a non-exhaustive list of what would be useful additions). Add your name to the file as part of your PR, no matter how small it may seem.


Numeric Rust is primarily inspired by Numpy and borrows heavily from that project. Even the name is a play on Numeric Python. Another source of some inspiration is Torch7.