Функция linalg.eig
Функция torch.linalg.eig вычисляет собственные значения и собственные векторы для квадратной матрицы. Она возвращает два тензора: собственные значения и собственные векторы. Функция работает как для вещественных, так и для комплексных матриц. Первым параметром функция принимает входную матрицу. Вторым параметром можно указать, нужно ли вычислять собственные векторы.
Синтаксис
torch.linalg.eig(A, *, eigenvectors=False)
Пример
Давайте вычислим собственные значения для квадратной матрицы:
import torch
t = torch.tensor([[1, 2], [3, 4]], dtype=torch.float)
eigenvalues, eigenvectors = torch.linalg.eig(t)
print(eigenvalues)
Результат выполнения кода:
tensor([-0.3723+0.j, 5.3723+0.j])
В результате мы получили комплексные собственные значения, даже если исходная матрица была вещественной.
Пример
Давайте вычислим собственные векторы для той же матрицы:
import torch
t = torch.tensor([[1, 2], [3, 4]], dtype=torch.float)
eigenvalues, eigenvectors = torch.linalg.eig(t, eigenvectors=True)
print(eigenvectors)
Результат выполнения кода:
tensor([[-0.8246+0.j, -0.4160+0.j],
[ 0.5658+0.j, -0.9094+0.j]])
Каждый столбец тензора собственных векторов соответствует одному собственному значению.
Пример
Давайте проверим, что собственные векторы действительно удовлетворяют уравнению A * v = lambda * v:
import torch
t = torch.tensor([[1, 2], [3, 4]], dtype=torch.float)
eigenvalues, eigenvectors = torch.linalg.eig(t, eigenvectors=True)
v = eigenvectors[:, 1]
lambda_v = eigenvalues[1]
res = torch.matmul(t, v) - lambda_v * v
print(res)
Результат выполнения кода:
tensor([-7.4506e-09+0.j, 1.4901e-08+0.j])
Мы получили почти нулевой вектор, что подтверждает правильность вычислений.