#ndarray #matrix #proc-macro #einsum

einsum-derive

基于proc-macro的einsum实现

1个不稳定版本

0.1.0 2022年11月30日

#879 in 科学

MIT/Apache

55KB
1K SLoC

einsum-derive

master bench

ndarray crate提供的基于proc-macro的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]
]);

此proc-macro将输入子脚本的"ij,jk->ik"编译成执行相应操作的Rust代码。

状态 / 路线图

架构

  • einsum-derive crate是proc-macro crate,提供上述einsum!宏。
  • einsum-codegen crate实现了类似于ij,jk->ik的einsum子脚本的解析器,并生成Rust代码。
  • numpy.einsum是Python中知名的einsum实现。
  • opt_einsum是针对NumPy和其他线性代数包的einsum计算优化实现。
  • oracleofnj/einsum是rust-ndarray的基于运行时的einsum实现。

许可

© 2022 Teramura Toshiki (@termoshtt)

本项目许可为以下之一

任选其一。

依赖

~2.5MB
~58K SLoC