如何在NumPy中处理因奇异性导致的非法矩阵操作的异常

30 投票
2 回答
21417 浏览
提问于 2025-04-17 12:24

在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

撰写回答