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 次下载
100KB
2K SLoC
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