gpt4 book ai didi

python - 用于逆矩阵和稀疏矩阵乘积的高效 numpy/lapack 例程?

转载 作者:行者123 更新时间:2023-11-30 23:51:30 41 4
gpt4 key购买 nike

我有一个方形且密集的矩阵B,以及一个矩形且稀疏的矩阵A

有没有办法有效地计算乘积B^-1 * A

到目前为止,我使用(在 numpy 中)

tmp = B.inv()
return tmp * A

我相信,这让我们了解了 A 的稀疏性。我正在考虑使用稀疏方法numpy.sparse.linalg.spsolve,但这要求 B 而不是 A 是稀疏的。

还有其他方法可以加快速度吗?

最佳答案

由于要求逆的矩阵是稠密的,所以 spsolve 不是您想要的工具。此外,计算一个矩阵的逆并将其乘以另一个矩阵是不好的数值实践 - 你最好使用 LU decomposition ,这是由 scipy 支持的。

另一点是,除非您使用矩阵类(我认为 ndarray 类更好,这是一个品味问题),否则您需要使用 dot 而不是乘法运算符(operator)。而如果想要高效地将稀疏矩阵与稠密矩阵相乘,则需要使用稀疏矩阵的dot方法。不幸的是,这仅在第一个矩阵稀疏时才有效,因此您需要使用 Anycorn 建议的技巧,即采用转置来交换运算顺序。

这是一个惰性实现,它不使用 LU 分解,但在其他方面应该是高效的:

B_inv = scipy.linalg.inv(B)
C = (A.transpose().dot(B_inv.transpose())).transpose()

正确地进行 LU 分解需要找到一种有效地将三角矩阵乘以稀疏矩阵的方法,但目前我还没有做到这一点。

关于python - 用于逆矩阵和稀疏矩阵乘积的高效 numpy/lapack 例程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6766838/

41 4 0
文章推荐: wcf - 回收 IIS7 应用程序池是否会终止任何当前正在执行的请求?
文章推荐: jquery - 合并两行的表排序器
文章推荐: javascript - 事件/类设计模式(原型(prototype))
文章推荐: jquery - 使用 jQuery 以编程方式选择