matten 0.20.13

A family-car multidimensional array (tensor) library for small numerical trials / PoCs.
Documentation
//! Matrix × vector multiplication using `Tensor::matmul`.
//!
//! Run: cargo run --example 21_matrix_vector_product
//!
//! Shape rule: [m, n] × [n] -> [m]

use matten::Tensor;

fn main() {
    // [[1,2,3],[4,5,6]] × [1,0,1] = [4, 10]
    let m = Tensor::new(vec![1.0, 2.0, 3.0, 4.0, 5.0, 6.0], &[2, 3]);
    let v = Tensor::from_vec(vec![1.0, 0.0, 1.0]);

    let r = m.matmul(&v);
    println!("m    = {m:?}");
    println!("v    = {v:?}");
    println!("m·v  = {r:?}"); // [4.0, 10.0]

    assert_eq!(r.shape(), &[2]);
    assert_eq!(r.as_slice(), &[4.0, 10.0]);

    // Vector × matrix: [n] × [n, p] -> [p]
    let w = Tensor::from_vec(vec![1.0, 2.0]);
    let r2 = w.matmul(&m.transpose());
    println!("w·mᵀ = {r2:?}");

    println!("Shapes and values verified: OK");
}