快捷方式

torch.linalg.lu

torch.linalg.lu(A, *, pivot=True, out=None)

計算矩陣的帶部分主元策略的 LU 分解。

K\mathbb{K}R\mathbb{R}C\mathbb{C},矩陣 AKm×nA \in \mathbb{K}^{m \times n} 的**帶部分主元策略的 LU 分解**定義為

A=PLUPKm×m,LKm×k,UKk×nA = PLU\mathrlap{\qquad P \in \mathbb{K}^{m \times m}, L \in \mathbb{K}^{m \times k}, U \in \mathbb{K}^{k \times n}}

其中 k = min(m,n),$P$ 是置換矩陣,$L$ 是對角線上元素為 1 的下三角矩陣,$U$ 是上三角矩陣。

如果 pivot= FalseA 在 GPU 上,則計算**不帶主元策略的 LU 分解**

A=LULKm×k,UKk×nA = LU\mathrlap{\qquad L \in \mathbb{K}^{m \times k}, U \in \mathbb{K}^{k \times n}}

pivot= False 時,返回的矩陣 P 將為空。如果 A 的任何主子式是奇異的,則不帶主元策略的 LU 分解可能不存在。在這種情況下,輸出矩陣可能包含 infNaN

支援 float, double, cfloat 和 cdouble 資料型別的輸入。也支援矩陣批次輸入,如果 A 是矩陣批次,則輸出具有相同的批次維度。

另請參閱

torch.linalg.solve() 使用帶部分主元策略的 LU 分解求解線性方程組。

警告

LU 分解幾乎從不唯一,因為通常存在不同的置換矩陣可以產生不同的 LU 分解。因此,不同的平臺(如 SciPy)或不同裝置上的輸入可能會產生不同的有效分解結果。

警告

僅當輸入矩陣是滿秩時才支援梯度計算。如果不滿足此條件,不會丟擲錯誤,但梯度可能不是有限的。這是因為帶主元策略的 LU 分解在這些點不可微。

引數
  • A (Tensor) – 形狀為 (*, m, n) 的張量,其中 * 表示零個或多個批次維度。

  • pivot (bool, 可選) – 控制是計算帶部分主元策略的 LU 分解還是不帶主元策略的 LU 分解。預設值:True

關鍵字引數

out (tuple, 可選) – 三個張量的輸出元組。如果為 None 則忽略。預設值:None

返回

一個命名元組 (P, L, U)

示例

>>> A = torch.randn(3, 2)
>>> P, L, U = torch.linalg.lu(A)
>>> P
tensor([[0., 1., 0.],
        [0., 0., 1.],
        [1., 0., 0.]])
>>> L
tensor([[1.0000, 0.0000],
        [0.5007, 1.0000],
        [0.0633, 0.9755]])
>>> U
tensor([[0.3771, 0.0489],
        [0.0000, 0.9644]])
>>> torch.dist(A, P @ L @ U)
tensor(5.9605e-08)

>>> A = torch.randn(2, 5, 7, device="cuda")
>>> P, L, U = torch.linalg.lu(A, pivot=False)
>>> P
tensor([], device='cuda:0')
>>> torch.dist(A, L @ U)
tensor(1.0376e-06, device='cuda:0')

文件

查閱 PyTorch 的全面開發者文件

檢視文件

教程

獲取面向初學者和高階開發者的深入教程

檢視教程

資源

查詢開發資源並獲得疑問解答

檢視資源