2 个不稳定版本
0.2.0 | 2023 年 5 月 28 日 |
---|---|
0.1.0 | 2023 年 5 月 25 日 |
#28 in #matrix-operations
23 次每月下载
24KB
474 行
Matx
一个轻量级的 Rust 矩阵库,允许进行简单(即易于实现)的矩阵处理和运算。
运算不在原地执行,因此大多数函数,尤其是数学运算,都是纯函数,它们消耗其参数并输出一个新矩阵。
- GitHub: https://github.com/Jerem-dY/Matx
- Crate.io: https://crates.io/crates/matx
- 文档: https://docs.rs/matx/0.1.0/matx/
待办事项
- 矩阵初始化(填充,随机,自定义)
- 基本操作
Mat
与Mat
以及Mat
与Scalar
- 更好的错误处理(可能因尺寸不兼容而失败的运算的
Results
) - 矩阵旋转
- 用于简化初始化的宏
- 更好的递归矩阵(运算、显示等)
- 在 GPU 上进行计算?
使用说明
请勿犹豫,查看更多示例 tests.rs
。
创建矩阵
声明矩阵相当直接:您只需要指定 元素的类型,行数 和 列数。
let mut a = Matrix::<f64>::new(2, 3);
默认情况下,使用 Matrix::new()
将矩阵初始化为零(因此仅适用于 T: num::Num
,即数字)。如果需要,可以使用 Matrix::from<Vec<Vec<T>>>()
指定矩阵的全部内容,即使用向量向量(每个向量代表一行)。
// 1 2 3
// 4 5 6
let a = Matrix::<f64>::from(vec![
vec![1.0f64, 2.0f64, 3.0f64],
vec![4.0f64, 5.0f64, 6.0f64]
]);
运算符
乘法 和 加法 是在 矩阵之间 以及在 矩阵和类型为 T 的对象之间(如果 T 是数字)实现的。
矩阵之间的操作可能需要两者之间的兼容性(在尺寸上);由于现在尺寸检查大多在运行时进行,因此矩阵运算(如点积)返回一个 Result<>
。
因此,不建议使用行内算术:以下代码应逐步计算,以保持良好的实践,否则所有展开的操作会使代码难以阅读:a + b * (d - e)
所有操作都不会原地执行:它们都会生成一个新的矩阵。如果您需要在多个操作中使用矩阵,则需要显式地使用.clone()
创建一个矩阵。
当前实现的操作如下
Mat * Mat
和Mat * scal
Mat / Mat
和Mat / scal
Mat + Mat
和Mat + scal
Mat - Mat
和Mat - scal
对于所有实现了T+T
的类型,都可以通过迭代器求和矩阵内容:.sum()
映射
您可以使用.map()
方法对每个矩阵元素应用闭包
依赖项
~1.3–2.4MB
~49K SLoC