快捷方式

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 分解中 LU 的非常量元素。

返回的置換矩陣由一個 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) 的張量,其中 * 表示零個或多個批次維度。

關鍵字引數
  • pivot (bool, optional) – 是否計算帶部分主元選擇的 LU 分解,或者計算常規 LU 分解。CPU 不支援 pivot= False。預設值:True

  • out (tuple, optional) – 用於寫入輸出的兩個張量的元組。如果為 None 則忽略。預設值:None

返回

一個命名元組 (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

文件

訪問 PyTorch 的全面開發者文件

檢視文件

教程

獲取針對初學者和高階開發者的深入教程

檢視教程

資源

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

檢視資源