在这里处理一些矩阵代数。有时我需要将一个可能为奇数或病态的矩阵求逆。我知道简单地做到这一点是pythonic的:

try:
    i = linalg.inv(x)
except LinAlgErr as err:
    #handle it

但不确定效率如何。这会更好吗?
if linalg.cond(x) < 1/sys.float_info.epsilon:
    i = linalg.inv(x)
else:
    #handle it

numpy.linalg是否可以简单地执行我所要求的测试?

最佳答案

因此,根据此处的输入,我将显式测试标记为原始代码块作为解决方案:

if linalg.cond(x) < 1/sys.float_info.epsilon:
    i = linalg.inv(x)
else:
    #handle it

令人惊讶的是,numpy.linalg.inv函数不执行此测试。我检查了代码,发现它经过了所有的欺骗,然后仅调用了lapack例程-效率很低。另外,我会第二点说DaveP:除非明确需要矩阵的逆,否则不应该对其进行计算。

关于python - 高效和Pythonic检查奇异矩阵,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13249108/

10-14 06:35