この記事は数値計算Advent Calendar 2022の1日目の記事です。 前回の記事では既存実装としてNumPyにおけるnumpy.einsumの仕様を見ていきましたが、今回はRustのndarray crate向けにeinsumを作っていきます。完成形は次のようになります: use ndarray::array; use einsum_derive::einsum; let a = array![ [1.0, 2.0], [3.0, 4.0] ]; let b = array![ [1.0, 2.0], [3.0, 4.0] ]; let c = einsum!("ij,jk->ik", a, b); assert_eq!(c, array![ [6.0, 8.0], [12.0, 16.0] ]); このeinsum_derive crateは下記のリポジトリで開発されています: