Подтвердить что ты не робот

Как попытаться, за исключением операции с нелегальной матрицей из-за сингулярности в NumPy

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

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

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

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

Ответ 1

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

import numpy

try:
    # your code that will (maybe) throw
except numpy.linalg.linalg.LinAlgError as err:
    if 'Singular matrix' in err.message:
        # your error handling block
    else:
        raise

Ответ 2

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