在这里处理一些矩阵代数。有时我需要将一个可能为奇数或病态的矩阵求逆。我知道简单地做到这一点是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/