快捷方式

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 的全面开发者文档

查看文档

教程

获取针对初学者和高级开发者的深入教程

查看教程

资源

查找开发资源并获得问题解答

查看资源