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()для другого (гораздо более быстрого) разложения, работающего над матрицами любой формы.- Parameters
-
A (Tensor) – тензор формы
(*, n, n)где*— ноль или более размерностей пакета, состоящие из диагонализуемых матриц. - Keyword Arguments
-
out (tuple, optional) – кортеж из двух тензоров. Игнорируется, если
None. Значение по умолчанию:None. - Returns
-
Именованный кортеж
(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/2.1/generated/torch.linalg.eig.html