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 索引的向量表示。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