快捷键

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 具有相同的形状。其上三角和下三角部分编码了 LU 的非常数元素,它们是 A 的 LU 分解。

返回的置换矩阵由一个 1 索引向量表示。pivots[i] == j 表示在算法的第 i 步中,第 i 行与第 j-1 行进行了置换。

在 CUDA 上,可以使用 pivot = False。在这种情况下,如果存在,此函数将返回不带置换的 LU 分解。

支持浮点数、双精度浮点数、复浮点数和复双精度浮点数的数据类型输入。也支持矩阵批处理,如果输入是矩阵批处理,则输出具有相同的批处理维度。

注意

当输入在 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(张量)- 形状为(*, m, n)的张量,其中*表示零个或多个批处理维度。

关键字参数:
  • pivot (bool, optional) – 是否计算带有部分主元置换的 LU 分解,或常规 LU 分解。 pivot = False 在 CPU 上不支持。默认:True。

  • out(元组,可选)- 两个 tensor 的元组,用于写入输出。如果为 None 则忽略。默认:None。

返回值:

一个命名元组(LU,pivots)。

引发:

运行时错误 - 如果 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 贡献者。

使用 Sphinx 构建,并使用 Read the Docs 提供的主题。

文档

PyTorch 的全面开发者文档

查看文档

教程

深入了解初学者和高级开发者的教程

查看教程

资源

查找开发资源并获得您的疑问解答

查看资源