torch.linalg.lu¶
- torch.linalg.lu(A, *, pivot=True, out=None)¶
計算矩陣的 LU 分解,並使用部分主元法 (partial pivoting)。
假設 為 或 ,矩陣 的**使用部分主元法的 LU 分解**定義為:
其中 k = min(m,n), 是一個 置換矩陣 (permutation matrix), 是一個對角線上為 1 的下三角矩陣,而 是一個上三角矩陣。
如果
pivot
= False 並且A
在 GPU 上,則會計算**不使用主元法的 LU 分解**當
pivot
= False 時,回傳的矩陣P
將會是空的。 如果A
的任何主子式是奇異的,則不使用 pivoting 的 LU 分解 可能不存在。 在這種情況下,輸出矩陣可能包含 inf 或 NaN。支援 float, double, cfloat 和 cdouble 等資料類型輸入。 也支援批次的矩陣,如果
A
是一批矩陣,那麼輸出將具有相同的批次維度。另請參閱
torch.linalg.solve()
使用帶有部分 pivoting 的 LU 分解來求解線性方程式系統。警告
LU 分解幾乎永遠不是唯一的,因為通常存在不同的排列矩陣,可以產生不同的 LU 分解。 因此,不同的平台(如 SciPy)或不同設備上的輸入可能會產生不同的有效分解。
警告
只有當輸入矩陣是滿秩 (full-rank) 時,才支援梯度計算。 如果不符合此條件,不會拋出錯誤,但梯度可能不是有限的。 這是因為帶有 pivoting 的 LU 分解在這些點上是不可微分的。
- 參數
- 關鍵字參數
out (tuple, optional) – 三個張量的輸出元組。 如果為 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')