如何在NumPy中处理因奇异性导致的非法矩阵操作的异常
在NumPy中,我想用linalg
来计算每一步牛顿-拉夫森方法中的矩阵逆(我故意选择小规模的问题,这样可以用解析的方法计算海森矩阵的逆)。但是,当我接近收敛时,海森矩阵变得接近奇异。
有没有什么方法可以在NumPy中测试一个矩阵是否被认为是奇异的(计算行列式的方法不够可靠)?理想情况下,如果能用try
except
块来捕捉NumPy的奇异数组错误,那就太好了。
我该怎么做呢?在终端中显示的NumPy错误是:
raise LinAlgError, 'Singular matrix'
numpy.linalg.linalg.LinAlgError: Singular matrix
2 个回答
7
wim 的回答在现在的 NumPy 版本中已经不再适用了(我写这段话时用的是 1.13 版本)。现在应该这样做:
import numpy as np
try:
# your code that will (maybe) throw
except np.linalg.LinAlgError as e:
if 'Singular matrix' in str(e):
# your error handling block
else:
raise
57
语法应该是这样的:
import numpy as np
try:
# your code that will (maybe) throw
except np.linalg.LinAlgError as err:
if 'Singular matrix' in str(err):
# your error handling block
else:
raise