Функция linalg.pinv
Функция linalg.pinv вычисляет псевдообратную матрицу
Мура-Пенроуза для заданной матрицы. Псевдообратная матрица
является обобщением понятия обратной матрицы для случаев,
когда матрица не является квадратной или вырожденной.
Первым параметром функция принимает матрицу в виде массива
NumPy. Вторым параметром можно задать порог отсечения
сингулярных значений, а третьим - параметр rcond
для управления точностью вычислений.
Синтаксис
np.linalg.pinv(a, rcond=1e-15, hermitian=False)
Пример
Давайте вычислим псевдообратную матрицу для прямоугольной матрицы размером 2x3:
import numpy as np
arr = np.array([[1, 2, 3], [4, 5, 6]])
res = np.linalg.pinv(arr)
print(res)
Результат выполнения кода:
[[-0.94444444 0.44444444]
[-0.11111111 0.11111111]
[ 0.72222222 -0.22222222]]
Пример
Вычислим псевдообратную матрицу для квадратной вырожденной матрицы:
import numpy as np
arr = np.array([[1, 2], [2, 4]])
res = np.linalg.pinv(arr)
print(res)
Результат выполнения кода:
[[0.04 0.08]
[0.08 0.16]]
Пример
Используем параметр rcond для управления порогом отсечения сингулярных значений:
import numpy as np
arr = np.array([[1, 0], [0, 0], [0, 0]])
res = np.linalg.pinv(arr, rcond=0.1)
print(res)
Результат выполнения кода:
[[1. 0. 0.]
[0. 0. 0.]]
Пример
Используем параметр hermitian для ускорения вычислений для эрмитовых матриц:
import numpy as np
arr = np.array([[2, 1], [1, 2]])
res = np.linalg.pinv(arr, hermitian=True)
print(res)
Результат выполнения кода:
[[ 0.66666667 -0.33333333]
[-0.33333333 0.66666667]]
Смотрите также
-
функцию
inv,
которая вычисляет обратную матрицу для квадратных невырожденных матриц -
функцию
svd,
которая выполняет сингулярное разложение матрицы -
функцию
matrix_rank,
которая вычисляет ранг матрицы -
функцию
lstsq,
которая решает задачу наименьших квадратов