torch.linalg.eig
-
torch.linalg.eig(A, *, out=None) -
Вычисляет разложение по собственным значениям квадратной матрицы, если оно существует.
Пусть будет или , разложение по собственным значениям квадратной матрицы (если оно существует) определяется как
Это разложение существует тогда и только тогда, когда является диагонализуемой. Это имеет место, когда все его собственные значения различны.
Поддерживает ввод типов данных float, double, cfloat и cdouble. Также поддерживает пакеты матриц, и если
Aявляется пакетом матриц, то выход имеет те же размерности пакета.Примечание
Собственные значения и собственные векторы вещественной матрицы могут быть комплексными.
Примечание
Когда входные данные находятся на устройстве CUDA, эта функция синхронизирует это устройство с процессором.
Предупреждение
Эта функция предполагает, что
Aявляется диагонализуемой (например, когда все собственные значения различны). Если это не так, возвращаемые собственные значения будут верными, но .Предупреждение
Возвращаемые собственные векторы нормированы для получения нормы
1. Даже тогда собственные векторы матрицы не являются уникальными, и они не являются непрерывными относительноA. Из-за этого отсутствия уникальности различное аппаратное и программное обеспечение может вычислять различные собственные векторы.Это отсутствие уникальности вызвано тем, что умножение собственного вектора на производит другой набор допустимых собственных векторов матрицы. По этой причине функция потерь не должна зависеть от фазы собственных векторов, поскольку эта величина не определена. Это проверяется при вычислении градиентов этой функции. Таким образом, когда входные данные находятся на устройстве CUDA, эта функция синхронизирует это устройство с процессором при вычислении градиентов. Это проверяется при вычислении градиентов этой функции. Таким образом, при вычислении градиентов этой функции, когда входные данные находятся на устройстве CUDA, вычисление синхронизирует это устройство с процессором.
Предупреждение
Градиенты, вычисленные с помощью
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)
© 2024, PyTorch Contributors
PyTorch has a BSD-style license, as found in the LICENSE file.
https://pytorch.org/docs/1.13/generated/torch.linalg.eig.html