#ndarray #matrix #einsum

einsum-codegen

用于使用 proc-macro 生成 einsum 实现的辅助工具

1 个不稳定版本

0.1.0 2022 年 11 月 30 日

#598 in 科学


einsum-derive 中使用

MIT/Apache

44KB
833

einsum-derive

master bench

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

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

状态 / 路线图

架构

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

许可证

© 2022 Toshiki Teramura (@termoshtt)

该项目受以下任一许可证的许可:

任选其一。

依赖项

~2.5MB
~57K SLoC