12 个版本

使用旧的 Rust 2015

0.1.4 2016 年 9 月 23 日
0.1.3 2016 年 2 月 18 日
0.1.2 2016 年 1 月 5 日
0.1.0 2015 年 12 月 26 日
0.0.5 2015 年 6 月 28 日

#2008算法

每月 22 次下载

MIT 许可证

100KB
2K SLoC

Crates.io

numeric-rust

适用于 Rust 的通用 N 维矩阵类。它链接到 OpenBLAS 和 LAPACK 以加快张量运算(如矩阵乘法和线性求解器)。它尽可能地利用 Rust 的移动语义来避免不必要的复制。

文档

特性

一些已完成的和计划中的特性

  • 逐元素加法、减法、乘法、除法
  • 矩阵乘法和标量积
  • 索引
  • 切片
  • 泛型(从 Tensor<bool>Tensor<f64>
  • 数学函数
  • 线性求解器
  • 基本的随机数生成
  • 创建宏
  • 更新切片
  • 保存/加载 HDF5
  • 跨步切片
  • 广播轴
  • 对复数的基本支持
  • 奇异值分解
  • 矩阵逆

最近的进展总结在 CHANGELOG.md 中。对于计划中的功能,请参阅 TODO.md

示例

#[macro_use(tensor)]
extern crate numeric;

use numeric::Tensor;

fn main() {
    let a: Tensor<f64> = Tensor::range(6).reshape(&[2, 3]);
    let b = tensor![7.0, 3.0, 2.0; -3.0, 2.0, -5.0];
    let c = tensor![7.0, 3.0, 2.0];

    let d = &a + &b;         // a new tensor is returned
    println!("d = {}", d);

    let e = a.dot(&c);       // matrix multiplication (returns a new tensor)
    println!("e = {}", e);

    let f = a + &b;          // a is moved (no new memory is allocated)
    println!("f = {}", f);

    // Higher-dimensional
    let g: Tensor<f64> = Tensor::ones(&[2, 3, 4, 5]);
    println!("g = {}", g);
}

输出

d =
 7 4 4
 0 6 0
[Tensor<f64> of shape 2x3]
e =
  7 43
[Tensor<f64> of shape 2]
f =
 7 4 4
 0 6 0
[Tensor<f64> of shape 2x3]
g =
...
[Tensor<f64> of shape 2x3x4x5]

贡献

我们喜欢合并请求,并且这个项目有很多事情要做。如果您想得到贡献的建议,请查看 TODO.md(一个非详尽的建议添加列表)。无论贡献多么小,都将您的名字添加到 CONTRIBUTORS.md 文件中。

致谢

numeric-rust 主要受 Numpy 启发,并大量借鉴了该项目。甚至名称也是对 Numeric Python 的双关语。一些灵感的另一个来源是 Torch7。

依赖项

~62MB
~812K SLoC