use mdarray::{expr, grid, DSpan, Expression}; fn matmul(a: &DSpan, b: &DSpan, c: &mut DSpan) { for (mut cj, bj) in c.cols_mut().zip(b.cols()) { for (ak, bkj) in a.cols().zip(bj) { for (cij, aik) in cj.expr_mut().zip(ak) { *cij = aik.mul_add(*bkj, *cij); } } } } fn main() { let a = expr![[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]]; let b = expr![[0.0, 1.0], [1.0, 1.0]]; let mut c = grid![[0.0; 3]; 2]; dbg!(std::any::type_name_of_val(&a)); dbg!(std::any::type_name_of_val(&b)); dbg!(std::any::type_name_of_val(&c)); matmul(&a, &b, &mut c); assert_eq!(c, expr![[4.0, 5.0, 6.0], [5.0, 7.0, 9.0]]); }