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 dtypes 的输入。也支持矩阵批处理,如果输入是矩阵批处理,则输出具有相同的批处理维度。
注意
当输入在 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