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