torch.linalg.eig
-
torch.linalg.eig(A, *, out=None)[источник] -
Вычисляет разложение квадратной матрицы на собственные значения и собственные векторы, если оно существует.
Пусть — это или . Тогда разложение на собственные значения и собственные векторы квадратной матрицы (если оно существует) определяется как
Это разложение существует тогда и только тогда, когда диагонализируема. Это выполняется, когда все её собственные значения различны.
Поддерживаются входные данные типов float, double, cfloat и cdouble. Также поддерживаются пакеты матриц; если
A— это пакет матриц, выходные данные имеют те же размерности пакета.Порядок возвращаемых собственных значений не гарантируется.
Примечание
Собственные значения и собственные векторы вещественной матрицы могут быть комплексными.
Примечание
Если входные данные находятся на устройстве CUDA, эта функция синхронизирует это устройство с CPU.
Предупреждение
Эта функция предполагает, что
Aдиагонализируема (например, если все собственные значения различны). Если матрица не диагонализируема, возвращаемые собственные значения будут верными, но .Предупреждение
Возвращаемые собственные векторы нормализованы так, чтобы их норма равнялась
1. Даже в этом случае собственные векторы матрицы не являются единственными и не меняются непрерывно относительноA. Из-за этой неоднозначности на разных аппаратных и программных платформах могут вычисляться разные собственные векторы.Эта неоднозначность обусловлена тем, что умножение собственного вектора на даёт другой набор допустимых собственных векторов матрицы. Поэтому функция потерь не должна зависеть от фазы собственных векторов, поскольку эта величина не определена однозначно. Это проверяется при вычислении градиентов данной функции. Таким образом, если входные данные находятся на устройстве CUDA, вычисление градиентов этой функции синхронизирует это устройство с CPU.
Предупреждение
Градиенты, вычисляемые с использованием тензора
eigenvectors, будут конечными только в том случае, еслиAимеет различные собственные значения. Кроме того, если расстояние между любыми двумя собственными значениями близко к нулю, градиент будет численно неустойчивым, поскольку он зависит от собственных значений через вычисление .См. также
torch.linalg.eigvals()вычисляет только собственные значения. В отличие отtorch.linalg.eig(), градиентыeigvals()всегда численно устойчивы.torch.linalg.eigh()— более быстрая функция для вычисления разложения на собственные значения и собственные векторы эрмитовых и симметричных матриц.torch.linalg.svd()— функция для вычисления другого типа спектрального разложения, применимого к матрицам любой формы.torch.linalg.qr()— ещё одно (гораздо более быстрое) разложение, применимое к матрицам любой формы.- Параметры:
-
A (Tensor) – тензор формы
(*, n, n), где*— ноль или более пакетных размерностей, содержащих диагонализируемые матрицы. - Именованные аргументы:
-
out (tuple, необязательный) – выходной кортеж из двух тензоров. Игнорируется, если
None. Значение по умолчанию:None. - Возвращает:
-
Именованный кортеж
(eigenvalues, eigenvectors), соответствующий приведённым выше и .eigenvaluesиeigenvectorsвсегда будут комплексными, даже еслиA— вещественная матрица. Собственные векторы представлены столбцамиeigenvectors.
Примеры:
>>> A = torch.randn(2, 2, dtype=torch.complex128) >>> A tensor([[ 0.9828+0.3889j, -0.4617+0.3010j], [ 0.1662-0.7435j, -0.6139+0.0562j]], dtype=torch.complex128) >>> L, V = torch.linalg.eig(A) >>> L tensor([ 1.1226+0.5738j, -0.7537-0.1286j], dtype=torch.complex128) >>> V tensor([[ 0.9218+0.0000j, 0.1882-0.2220j], [-0.0270-0.3867j, 0.9567+0.0000j]], dtype=torch.complex128) >>> torch.dist(V @ torch.diag(L) @ torch.linalg.inv(V), A) tensor(7.7119e-16, dtype=torch.float64) >>> A = torch.randn(3, 2, 2, dtype=torch.float64) >>> L, V = torch.linalg.eig(A) >>> torch.dist(V @ torch.diag_embed(L) @ torch.linalg.inv(V), A) tensor(3.2841e-16, dtype=torch.float64)
© 2026, PyTorch Contributors
PyTorch has a BSD-style license, as found in the LICENSE file.
https://docs.pytorch.org/docs/2.14/generated/torch.linalg.eig.html