4 个版本
0.1.9 | 2023年1月30日 |
---|---|
0.1.8 | 2023年1月4日 |
0.1.7 | 2022年12月28日 |
0.1.6 | 2022年11月23日 |
#366 in 数学
626 次每月下载
87KB
1.5K SLoC
ndarray 的逆和行列式特质
在创建卡尔曼滤波代码时,需要矩阵求逆...
安装用于计算逆的外部代码既麻烦又痛苦。因此有了这个小特质。对于较小的矩阵来说,它很快,但是,正如预期的那样,使用专用硬件的专用库对于大型矩阵来说要快得多。不过,你仍然应该使用迭代/近似方法,例如梯度下降,用于机器学习应用。
如果你使用的是相对较小到中等的矩阵,在多个操作系统上,没有复杂的硬件,那么这里就是用例。
如果你的优先级是安装简单、纯 Rust 和可移植性,那么这段代码可能很有用。API 简单直观。你可以开始编写你的应用程序代码,而不必担心在多个操作系统上的复杂组件。
只需引用
use ndarray_inverse::Inverse;
添加 cargo 依赖项
ndarray-inverse = "*"
Array2 矩阵上可用的方法有 m.inv() 和 m.det()。显然,它们必须是方阵。
版本 1.6 添加了 m.inv_diag(),它将给出对角矩阵的逆,这要快得多,但是忽略任何非零的非对角值。这非常快,有时很有用,可能被认为是一些应用的“正则化”(例如,使用卡尔曼滤波的强化学习)。
版本 1.7 添加了 m.cholesky(),这对于无味卡尔曼滤波很有用。
版本 1.8 添加了 m.lu() 分解(它返回一个包含 (L,U,P) 值的元组以及相关的逆 (m.lu_inv()),对于较大的矩阵来说,速度要快得多,大约快 10 倍。主要的逆函数仍然是 m.inv(),它尝试 LU 分解,但如果它不合适,则无缝回退到标准方法。这使得单 CPU 矩阵逆计算速度在大多数情况下与外部库版本相当。
版本 1.9 使 m.inv_ut() 和 m.inv_lt() 上三角和下三角逆对外部调用可用。
依赖关系
~1.5MB
~25K SLoC