torch.linalg.lu¶
- torch.linalg.lu(A, *, pivot=True, out=None)¶
計算矩陣的帶部分主元策略的 LU 分解。
令 為 或 ,矩陣 的**帶部分主元策略的 LU 分解**定義為
其中 k = min(m,n),$P$ 是置換矩陣,$L$ 是對角線上元素為 1 的下三角矩陣,$U$ 是上三角矩陣。
如果
pivot= False 且A在 GPU 上,則計算**不帶主元策略的 LU 分解**當
pivot= False 時,返回的矩陣P將為空。如果A的任何主子式是奇異的,則不帶主元策略的 LU 分解可能不存在。在這種情況下,輸出矩陣可能包含 inf 或 NaN。支援 float, double, cfloat 和 cdouble 資料型別的輸入。也支援矩陣批次輸入,如果
A是矩陣批次,則輸出具有相同的批次維度。另請參閱
torch.linalg.solve()使用帶部分主元策略的 LU 分解求解線性方程組。警告
LU 分解幾乎從不唯一,因為通常存在不同的置換矩陣可以產生不同的 LU 分解。因此,不同的平臺(如 SciPy)或不同裝置上的輸入可能會產生不同的有效分解結果。
警告
僅當輸入矩陣是滿秩時才支援梯度計算。如果不滿足此條件,不會丟擲錯誤,但梯度可能不是有限的。這是因為帶主元策略的 LU 分解在這些點不可微。
- 引數
- 關鍵字引數
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')