評價此頁

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 索引的向量表示。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 分解。pivot= False 在 CPU 上不受支援。預設為 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