N-dimensional matrix class for Rust 1.0. It links to OpenBLAS to give fast operations like the matrix multiplication. It utilizes Rust's move semantics as much as possible to avoid unnecessary copies.
Some of the completed and planned features:
f64
only)```rust use numeric::tensor::Tensor;
fn main() { let a = Tensor::range(6).reshaped(&[2, 3]); let b = Tensor::new(vec![7.0, 3.0, 2.0, -3.0, 2.0, -5.0]).reshaped(&[2, 3]); let c = Tensor::new(vec![7.0, 3.0, 2.0]);
let d = &a + &b; // a copy is made
println!("d = \n{}", d);
let e = Tensor::dot(&a, &c); // matrix multiplication (returns a new tensor)
println!("e = \n{}", e);
let f = a + &b; // a is moved (no memory is allocated)
println!("f = \n{}", f);
// Higher-dimensional
println!("g = \n{}", Tensor::ones(&[2, 3, 4, 5]));
} ```
Output:
d =
[[ 7.00 4.00 4.00]
[ 0.00 6.00 0.00]]
e =
[ 7.00 43.00]
f =
[[ 7.00 4.00 4.00]
[ 0.00 6.00 0.00]]
g =
Tensor([2, 3, 4, 5])