Как попробовать - кроме недопустимой матричной операции из-за особенности в NumPy - PullRequest
19 голосов
/ 06 февраля 2012

В NumPy я пытаюсь использовать linalg для вычисления инверсий матриц на каждом шаге схемы Ньютона-Рафсона (размер задачи преднамеренно мал, чтобы мы могли инвертировать аналитически вычисленные матрицы Гессе). Однако после того, как я продвинулся далеко в сторону сближения, гессиан приблизился к единственному.

Есть ли в NumPy какой-либо метод, позволяющий мне проверить, считается ли матрица единичной (вычислитель недостаточно надежен)? В идеале было бы неплохо, если бы есть способ использовать блок try except для обнаружения ошибки единственного массива NumPy.

Как бы я это сделал? Ошибка NumPy на терминале:

raise LinAlgError, 'Singular matrix'
numpy.linalg.linalg.LinAlgError: Singular matrix

Ответы [ 2 ]

37 голосов
/ 06 февраля 2012

Синтаксис будет такой:

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
6 голосов
/ 04 июля 2017

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
...