numpy.linalg.inv如何计算正交矩阵的逆矩阵?

6
我正在实现一个LinearTransformation类,它继承自numpy.matrix并使用numpy.matrix.I计算变换矩阵的逆矩阵。

有没有人知道在尝试计算逆矩阵之前,numpy是否检查矩阵的正交性?我之所以问是因为我的大部分矩阵(但不是全部)都是正交的,我想知道是否应该在尝试反转之前实现一些快速的正交性检查。


2
你可以查看源代码:https://github.com/numpy/numpy/blob/v1.7.0/numpy/linalg/linalg.py#L404 - Blender
嗯,我尝试过了,但我认为该函数只是调用了一个包装的C函数。我可以深入研究一下,但我想这里可能有人知道。 - Kyle_S-C
1个回答

12

实际上并不是这样的!

numpy.linalg.inv(A) 实际上会调用 numpy.linalg.solve(A,I),其中 I 是单位矩阵,并且 solve 使用了 lapack 的 LU 分解算法

也就是说,最终它执行的是高斯消元法,在默认情况下无法检测正交性。

我认为像 A * A.T = I 这样的矩阵乘积检查是不可行的,因为计算量很大。


谢谢,这种情况下,我会给我的类添加一个正交属性来加快速度。 - Kyle_S-C
如果我知道矩阵是厄米矩阵,那么我可以使用Cholesky分解,然后使用linalg.cho_solve(C,I)吗? - dashesy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接