當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Python PyTorch symeig用法及代碼示例


本文簡要介紹python語言中 torch.symeig 的用法。

用法:

torch.symeig(input, eigenvectors=False, upper=True, *, out=None)

參數

  • input(Tensor) -大小為 的輸入張量,其中 * 是零個或多個由對稱矩陣或 Hermitian 矩陣組成的批量維度。

  • eigenvectors(bool,可選的) -控製是否必須計算特征向量

  • upper(布爾值,可選的) -控製是否考慮上三角區域或下三角區域

關鍵字參數

out(tuple,可選的) -(Tensor, Tensor) 的輸出元組

返回

一個命名元組(特征值,特征向量)包含

  • 特征值(Tensor): 形狀(*, m) .以升序排列的特征值。

  • 特征向量(Tensor): 形狀(*, m, m) .如果eigenvectors=False,它是一個空張量。否則,該張量包含input.

返回類型

(TensorTensor)

此函數返回實數對稱或複數 Hermitian 矩陣input 或其批次的特征值和特征向量,由命名元組(特征值,特征向量)表示。

此函數計算 input 的所有特征值(和向量),使得

布爾參數 eigenvectors 定義特征向量和特征值或僅特征值的計算。

如果是 False ,則僅計算特征值。如果是 True ,則計算特征值和特征向量。

由於輸入矩陣input 應該是對稱的或厄米特矩陣,因此默認情況下隻使用上三角部分。

如果 upperFalse ,則使用下三角部分。

警告

torch.symeig() 已棄用,取而代之的是 torch.linalg.eigh() ,並將在未來的 PyTorch 版本中刪除。默認行為已從默認使用矩陣的上三角部分更改為使用下三角部分。

L, _ = torch.symeig(A, upper=upper) 應替換為

UPLO = "U" if upper else "L"
L = torch.linalg.eigvalsh(A, UPLO=UPLO)

L, V = torch.symeig(A, eigenvectors=True, upper=upper)應該替換為

UPLO = "U" if upper else "L"
L, V = torch.linalg.eigh(A, UPLO=UPLO)

注意

特征值按升序返回。如果input是一批矩陣,則以升序返回該批中每個矩陣的特征值。

注意

無論原始步幅如何,返回的矩陣 V 都將被轉置,即步幅為 V.contiguous().transpose(-1, -2).stride()

警告

在通過輸出後退時需要格外小心。這種操作隻有在所有特征值都不同時才是穩定的,並且 越小越不穩定。

例子:

>>> a = torch.randn(5, 5)
>>> a = a + a.t()  # To make a symmetric
>>> a
tensor([[-5.7827,  4.4559, -0.2344, -1.7123, -1.8330],
        [ 4.4559,  1.4250, -2.8636, -3.2100, -0.1798],
        [-0.2344, -2.8636,  1.7112, -5.5785,  7.1988],
        [-1.7123, -3.2100, -5.5785, -2.6227,  3.1036],
        [-1.8330, -0.1798,  7.1988,  3.1036, -5.1453]])
>>> e, v = torch.symeig(a, eigenvectors=True)
>>> e
tensor([-13.7012,  -7.7497,  -2.3163,   5.2477,   8.1050])
>>> v
tensor([[ 0.1643,  0.9034, -0.0291,  0.3508,  0.1817],
        [-0.2417, -0.3071, -0.5081,  0.6534,  0.4026],
        [-0.5176,  0.1223, -0.0220,  0.3295, -0.7798],
        [-0.4850,  0.2695, -0.5773, -0.5840,  0.1337],
        [ 0.6415, -0.0447, -0.6381, -0.0193, -0.4230]])
>>> a_big = torch.randn(5, 2, 2)
>>> a_big = a_big + a_big.transpose(-2, -1)  # To make a_big symmetric
>>> e, v = a_big.symeig(eigenvectors=True)
>>> torch.allclose(torch.matmul(v, torch.matmul(e.diag_embed(), v.transpose(-2, -1))), a_big)
True

相關用法


注:本文由純淨天空篩選整理自pytorch.org大神的英文原創作品 torch.symeig。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。