torch.linalg.lu_factor¶
- torch.linalg.lu_factor(A, *, bool pivot=True, out=None) -> (Tensor, Tensor)¶
計算帶部分主元選擇的矩陣 LU 分解的緊湊表示。
此函式計算由
torch.linalg.lu()給出的分解的緊湊表示。如果矩陣是方陣,此表示形式可用於torch.linalg.lu_solve()來求解與矩陣A相關的線性方程組。返回的分解表示為一個命名元組 (LU, pivots)。
LU矩陣的形狀與輸入矩陣A相同。其上三角和下三角部分編碼了矩陣A的 LU 分解中L和U的非常量元素。返回的置換矩陣由一個 1-indexed 向量表示。pivots[i] == j 表示在演算法的第 i 步中,第 i 行與第 j-1 行進行了置換。
在 CUDA 上,可以使用
pivot= False。在這種情況下,如果存在無主元選擇的 LU 分解,此函式將返回該分解。支援 float, double, cfloat 和 cdouble 資料型別的輸入。還支援矩陣批次處理,如果輸入是矩陣批次,則輸出具有相同的批次維度。
注意
當輸入位於 CUDA 裝置上時,此函式會使該裝置與 CPU 同步。有關不進行同步的版本,請參閱
torch.linalg.lu_factor_ex()。警告
LU 分解幾乎從不唯一,因為通常存在不同的置換矩陣,可能產生不同的 LU 分解。因此,不同的平臺(例如 SciPy)或在不同裝置上的輸入可能會產生不同的有效分解。
只有當輸入矩陣是滿秩時才支援梯度計算。如果未滿足此條件,不會丟擲錯誤,但梯度可能不是有限的。這是因為帶主元選擇的 LU 分解在這些點上不可微。
另請參閱
torch.linalg.lu_solve()在給定此函式輸出的情況下求解線性方程組,前提是輸入矩陣是方陣且可逆。torch.lu_unpack()將lu_factor()返回的張量解包成構成分解的三個矩陣 P, L, U。torch.linalg.lu()計算可能非方陣的帶部分主元選擇的 LU 分解。它是lu_factor()和torch.lu_unpack()的組合。torch.linalg.solve()求解線性方程組。它是lu_factor()和lu_solve()的組合。- 引數
A (Tensor) – 形狀為 (*, m, n) 的張量,其中 * 表示零個或多個批次維度。
- 關鍵字引數
- 返回
一個命名元組 (LU, pivots)。
- 引發異常
RuntimeError – 如果矩陣
A不可逆,或者批次A中的任何矩陣不可逆。
示例
>>> A = torch.randn(2, 3, 3) >>> B1 = torch.randn(2, 3, 4) >>> B2 = torch.randn(2, 3, 7) >>> LU, pivots = torch.linalg.lu_factor(A) >>> X1 = torch.linalg.lu_solve(LU, pivots, B1) >>> X2 = torch.linalg.lu_solve(LU, pivots, B2) >>> torch.allclose(A @ X1, B1) True >>> torch.allclose(A @ X2, B2) True