scipy.linalg.

pinvh#

scipy.linalg.pinvh(a, atol=None, rtol=None, lower=True, return_rank=False, check_finite=True)[источник]#

Вычислить (Мура-Пенроуза) псевдообратную эрмитовой матрицы.

Вычислить обобщенную обратную матрицу комплексной эрмитовой/вещественной симметричной матрицы, используя её разложение по собственным значениям и включая все собственные значения с 'большим' абсолютным значением.

Документация написана в предположении, что аргументы-массивы имеют указанные «основные» формы. Однако аргументы-массивы этой функции могут иметь дополнительные «пакетные» измерения, добавленные перед основной формой. В этом случае массив обрабатывается как пакет низкоразмерных срезов; см. Пакетные линейные операции подробности.

Параметры:
a(N, N) array_like

Вещественная симметричная или комплексная эрмитова матрица для псевдообращения

atolfloat, опционально

Абсолютный пороговый член, значение по умолчанию — 0.

Добавлено в версии 1.7.0.

rtolfloat, опционально

Относительный пороговый член, значение по умолчанию N * eps где eps является значением машинной точности типа данных a.

Добавлено в версии 1.7.0.

lowerbool, необязательно

Берутся ли соответствующие данные массива из нижнего или верхнего треугольника a. (По умолчанию: lower)

return_rankbool, необязательно

Если True, возвращает эффективный ранг матрицы.

check_finitebool, необязательно

Проверять ли, что входная матрица содержит только конечные числа. Отключение может повысить производительность, но может привести к проблемам (сбоям, незавершению) если входные данные содержат бесконечности или NaN.

Возвращает:
B(N, N) ndarray

Псевдообратная матрица a.

rankint

Эффективный ранг матрицы. Возвращается, если return_rank равно True.

Вызывает:
LinAlgError

Если алгоритм вычисления собственных значений не сходится.

Смотрите также

pinv

Псевдообратная матрица Мура-Пенроуза.

Примеры

Более подробный пример см. в pinv.

>>> import numpy as np
>>> from scipy.linalg import pinvh
>>> rng = np.random.default_rng()
>>> a = rng.standard_normal((9, 6))
>>> a = np.dot(a, a.T)
>>> B = pinvh(a)
>>> np.allclose(a, a @ B @ a)
True
>>> np.allclose(B, B @ a @ B)
True