#matrix #matrix-operations #github

matx

一个轻量级的 Rust 矩阵库,允许进行简单快速的矩阵运算

2 个不稳定版本

0.2.0 2023 年 5 月 28 日
0.1.0 2023 年 5 月 25 日

#28 in #matrix-operations

23 次每月下载

MIT 许可协议

24KB
474

Matx

一个轻量级的 Rust 矩阵库,允许进行简单(即易于实现)的矩阵处理和运算。
运算不在原地执行,因此大多数函数,尤其是数学运算,都是纯函数,它们消耗其参数并输出一个新矩阵。

build-badge GitHub GitHub release (latest by date) Twitter URL

待办事项

  • 矩阵初始化(填充随机自定义
  • 基本操作 MatMat 以及 MatScalar
  • 更好的错误处理(可能因尺寸不兼容而失败的运算的 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 * MatMat * scal
  • Mat / MatMat / scal
  • Mat + MatMat + scal
  • Mat - MatMat - scal

对于所有实现了T+T的类型,都可以通过迭代器求和矩阵内容:.sum()

映射

您可以使用.map()方法对每个矩阵元素应用闭包

依赖项

~1.3–2.4MB
~49K SLoC