torch.linalg.eigh
-
torch.linalg.eigh(A, UPLO='L', *, out=None)[исходный код] -
Вычисляет разложение по собственным значениям комплексной эрмитовой или вещественной симметричной матрицы.
Пусть равно или . Разложение по собственным значениям комплексной эрмитовой или вещественной симметричной матрицы определяется следующим образом:
где — эрмитово-сопряжённая транспонированная матрица, если является комплексной, и транспонированная матрица, если является вещественной. В вещественном случае ортогональна, а в комплексном — унитарна.
Поддерживаются входные данные типов float, double, cfloat и cdouble. Также поддерживаются пакеты матриц: если
A— это пакет матриц, выходные данные имеют те же размеры пакета.Предполагается, что
Aявляется эрмитовой (соответственно, симметричной), однако это не проверяется внутри функции. Вместо этого:- Если
UPLO= ‘L’(по умолчанию), при вычислениях используется только нижняя треугольная часть матрицы. - Если
UPLO= ‘U’, используется только верхняя треугольная часть матрицы.
Собственные значения возвращаются в порядке возрастания.
Примечание
Если входные данные находятся на устройстве CUDA, эта функция синхронизирует это устройство с CPU.
Примечание
Собственные значения вещественных симметричных или комплексных эрмитовых матриц всегда вещественны.
Предупреждение
Собственные векторы симметричной матрицы не являются единственными и не являются непрерывными по отношению к
A. Из-за отсутствия единственности разные аппаратные и программные средства могут вычислять разные собственные векторы.Эта неоднозначность обусловлена тем, что умножение собственного вектора на
-1в вещественном случае или на в комплексном случае даёт другой набор допустимых собственных векторов матрицы. Поэтому функция потерь не должна зависеть от фазы собственных векторов, поскольку эта величина не определена однозначно. Для комплексных входных данных это проверяется при вычислении градиентов данной функции. Таким образом, если входные данные являются комплексными и находятся на устройстве CUDA, вычисление градиентов этой функции синхронизирует устройство с CPU.Предупреждение
Градиенты, вычисленные с использованием тензора
eigenvectors, будут конечными только в том случае, еслиAимеет различные собственные значения. Кроме того, если расстояние между любыми двумя собственными значениями близко к нулю, градиент будет численно неустойчивым, поскольку он зависит от собственных значений через вычисление величины .Предупреждение
При выполнении
eighна устройствах CUDA с версиями CUDA до 12.1 update 1 pytorch может аварийно завершить работу, если в качестве входных данных используются большие плохо обусловленные матрицы. Дополнительные сведения см. в разделе Численная устойчивость линейной алгебры. В этом случае можно (1) изменить входные матрицы, чтобы улучшить их обусловленность, или (2) использоватьtorch.backends.cuda.preferred_linalg_library(), чтобы попробовать другие поддерживаемые бэкенды.См. также
torch.linalg.eigvalsh()вычисляет только собственные значения эрмитовой матрицы. В отличие отtorch.linalg.eigh(), градиентыeigvalsh()всегда численно устойчивы.torch.linalg.cholesky()— альтернативный способ разложения эрмитовой матрицы. Разложение Холецкого даёт меньше информации о матрице, но вычисляется намного быстрее, чем разложение по собственным значениям.torch.linalg.eig()— более медленная функция для вычисления разложения по собственным значениям квадратной матрицы, которая не обязательно является эрмитовой.torch.linalg.svd()— более медленная функция для вычисления более общего разложения матриц любой формы с помощью SVD.torch.linalg.qr()— ещё один (намного более быстрый) способ разложения, работающий с произвольными матрицами.- Параметры:
-
-
A (Tensor) – тензор формы
(*, n, n), где*— ноль или более размерностей пакета, состоящих из симметричных или эрмитовых матриц. -
UPLO ('L', 'U', необязательный) – задаёт, какую часть
Aиспользовать при вычислениях: верхнюю или нижнюю треугольную. По умолчанию:‘L’.
-
A (Tensor) – тензор формы
- Именованные аргументы:
-
out (tuple, необязательный) – выходной кортеж из двух тензоров. Игнорируется, если
None. По умолчанию:None. - Возвращает:
-
Именованный кортеж
(eigenvalues, eigenvectors), соответствующий приведённым выше и .eigenvaluesвсегда будет вещественным, даже еслиAявляется комплексным. Значения также будут упорядочены по возрастанию.eigenvectorsбудет иметь тот же тип данных, что иA, и содержать собственные векторы в виде столбцов.
- Примеры::
-
>>> A = torch.randn(2, 2, dtype=torch.complex128) >>> A = A + A.T.conj() # creates a Hermitian matrix >>> A tensor([[2.9228+0.0000j, 0.2029-0.0862j], [0.2029+0.0862j, 0.3464+0.0000j]], dtype=torch.complex128) >>> L, Q = torch.linalg.eigh(A) >>> L tensor([0.3277, 2.9415], dtype=torch.float64) >>> Q tensor([[-0.0846+-0.0000j, -0.9964+0.0000j], [ 0.9170+0.3898j, -0.0779-0.0331j]], dtype=torch.complex128) >>> torch.dist(Q @ torch.diag(L.cdouble()) @ Q.T.conj(), A) tensor(6.1062e-16, dtype=torch.float64)>>> A = torch.randn(3, 2, 2, dtype=torch.float64) >>> A = A + A.mT # creates a batch of symmetric matrices >>> L, Q = torch.linalg.eigh(A) >>> torch.dist(Q @ torch.diag_embed(L) @ Q.mH, A) tensor(1.5423e-15, 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.eigh.html