Функция linalg.pinv
Функция torch.linalg.pinv вычисляет псевдообратную матрицу
Мура-Пенроуза для входного тензора. Первым параметром функция
принимает тензор. Вторым параметром можно передать допуск rtol
для определения значимых сингулярных значений. Третьим параметром
можно передать hermitian для оптимизации вычислений для
эрмитовых матриц.
Синтаксис
torch.linalg.pinv(input, rtol=None, hermitian=False)
Пример
Давайте вычислим псевдообратную матрицу для квадратной матрицы:
import torch
t = torch.tensor([
[1.0, 2.0],
[3.0, 4.0],
])
res = torch.linalg.pinv(t)
print(res)
Результат выполнения кода:
tensor([
[-2.0000, 1.0000],
[1.5000, -0.5000],
])
Для невырожденной матрицы псевдообратная матрица совпадает с обычной обратной.
Пример
Рассмотрим вычисление псевдообратной матрицы для прямоугольной матрицы с размерностью 2x3:
import torch
t = torch.tensor([
[1.0, 2.0, 3.0],
[4.0, 5.0, 6.0],
])
res = torch.linalg.pinv(t)
print(res)
Результат выполнения кода:
tensor([
[-0.7778, -0.1111],
[-0.1111, 0.1111],
[0.5556, 0.3333],
])
Результатом является матрица размерности 3x2, которая является псевдообратной для исходной.
Пример
Используем параметр rtol для задания допуска при вычислении
псевдообратной матрицы:
import torch
t = torch.tensor([
[1.0, 2.0],
[3.0, 4.0],
[5.0, 6.0],
])
res = torch.linalg.pinv(t, rtol=1e-5)
print(res)
Результат выполнения кода:
tensor([
[-1.3333, -0.3333, 0.6667],
[1.0833, 0.3333, -0.4167],
])
Параметр rtol позволяет контролировать, какие сингулярные
значения считаются нулевыми.