scipy.linalg.

pinv#

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

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

Вычислить обобщенную обратную матрицу с использованием её сингулярного разложения U @ S @ V в экономичном режиме и выбор только столбцов/строк, связанных со значимыми сингулярными значениями.

Если s является максимальным сингулярным значением a, тогда пороговое значение значимости определяется atol + rtol * s. Любое сингулярное значение ниже этого значения считается незначимым.

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

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

Матрица для псевдообращения.

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

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

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

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

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

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

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

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

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

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

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

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

rankint

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

Вызывает:
LinAlgError

Если вычисление SVD не сходится.

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

pinvh

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

Примечания

Если A если обратима, то псевдообратная матрица Мура-Пенроуза в точности равна обратной к A [1]. Если A не является обратимой, тогда псевдообратная матрица Мура-Пенроуза вычисляет x решение для Ax = b такой, что ||Ax - b|| минимизируется [1].

Ссылки

[1] (1,2,3)

Penrose, R. (1956). On best approximate solutions of linear matrix equations. Mathematical Proceedings of the Cambridge Philosophical Society, 52(1), 17-19. doi:10.1017/S0305004100030929

Примеры

Для заданного m x n матрица A и n x m матрица B четыре условия Мура-Пенроуза:

  1. ABA = A (B является обобщённой обратной матрицей для A),

  2. BAB = B (A является обобщённой обратной матрицей для B),

  3. (AB)* = AB (AB является эрмитовой),

  4. (BA)* = BA (BA является эрмитовой) [1].

Здесь, A* обозначает эрмитово сопряжение. Псевдообратная матрица Мура-Пенроуза является уникальной B удовлетворяющий всем четырём этим условиям и существующий для любого A. Обратите внимание, что в отличие от стандартной обратной матрицы, A не обязательно должна быть квадратной матрицей или иметь линейно независимые столбцы/строки.

В качестве примера мы можем вычислить псевдообратную матрицу Мура-Пенроуза для случайной неквадратной матрицы и проверить, что она удовлетворяет четырём условиям.

>>> import numpy as np
>>> from scipy import linalg
>>> rng = np.random.default_rng()
>>> A = rng.standard_normal((9, 6))
>>> B = linalg.pinv(A)
>>> np.allclose(A @ B @ A, A)  # Condition 1
True
>>> np.allclose(B @ A @ B, B)  # Condition 2
True
>>> np.allclose((A @ B).conj().T, A @ B)  # Condition 3
True
>>> np.allclose((B @ A).conj().T, B @ A)  # Condition 4
True