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].Ссылки
Примеры
Для заданного
m x nматрицаAиn x mматрицаBчетыре условия Мура-Пенроуза:ABA = A(Bявляется обобщённой обратной матрицей дляA),BAB = B(Aявляется обобщённой обратной матрицей дляB),(AB)* = AB(ABявляется эрмитовой),(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