在这里研究一些矩阵代数。有时我需要反转一个可能是奇异的或病态的矩阵。我知道简单地这样做是 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 是否只是预先执行我禁止的测试?
原文由 Dr. Andrew 发布,翻译遵循 CC BY-SA 4.0 许可协议
因此,根据此处的输入,我将我的原始代码块标记为显式测试作为解决方案:
令人惊讶的是, numpy.linalg.inv 函数不执行此测试。我检查了代码,发现它经历了所有的阴谋,然后只调用了 lapack 例程——看起来效率很低。另外,我要第二点 DaveP 提出的观点:除非明确需要,否则不应计算矩阵的逆。