torch.eig¶
-
torch.
eig
(input, eigenvectors=False, *, out=None) -> (Tensor, Tensor)¶ Computes the eigenvalues and eigenvectors of a real square matrix.
Note
Since eigenvalues and eigenvectors might be complex, backward pass is supported only if eigenvalues and eigenvectors are all real valued.
When
input
is on CUDA,torch.eig()
causes host-device synchronization.- Parameters
- Keyword Arguments
out (tuple, optional) – the output tensors
- Returns
A namedtuple (eigenvalues, eigenvectors) containing
eigenvalues (Tensor): Shape . Each row is an eigenvalue of
input
, where the first element is the real part and the second element is the imaginary part. The eigenvalues are not necessarily ordered.eigenvectors (Tensor): If
eigenvectors=False
, it’s an empty tensor. Otherwise, this tensor of shape can be used to compute normalized (unit length) eigenvectors of corresponding eigenvalues as follows. If the corresponding eigenvalues[j] is a real number, column eigenvectors[:, j] is the eigenvector corresponding to eigenvalues[j]. If the corresponding eigenvalues[j] and eigenvalues[j + 1] form a complex conjugate pair, then the true eigenvectors can be computed as , .
- Return type
Example:
Trivial example with a diagonal matrix. By default, only eigenvalues are computed: >>> a = torch.diag(torch.tensor([1, 2, 3], dtype=torch.double)) >>> e, v = torch.eig(a) >>> e tensor([[1., 0.], [2., 0.], [3., 0.]], dtype=torch.float64) >>> v tensor([], dtype=torch.float64) Compute also the eigenvectors: >>> e, v = torch.eig(a, eigenvectors=True) >>> e tensor([[1., 0.], [2., 0.], [3., 0.]], dtype=torch.float64) >>> v tensor([[1., 0., 0.], [0., 1., 0.], [0., 0., 1.]], dtype=torch.float64)