快捷键

torch.linalg.lu

torch.linalg.lu(A, *, pivot=True, out=None)

计算矩阵的带部分主元选择的 LU 分解。

K\mathbb{K}R\mathbb{R}C\mathbb{C} ,矩阵 AKm×nA \in \mathbb{K}^{m \times n} 的带部分选主元的 LU 分解定义为

A=PLUPKm×m,LKm×k,UKk×nA = PLU\mathrlap{\qquad P \in \mathbb{K}^{m \times m}, L \in \mathbb{K}^{m \times k}, U \in \mathbb{K}^{k \times n}}

其中 k=min(m,n), PP 为置换矩阵, LL 为对角线元素为 1 的下三角矩阵, UU 为上三角矩阵。

如果 pivot 为 False 且 A 位于 GPU 上,则计算不带选主元的 LU 分解

A=LULKm×k,UKk×nA = LU\mathrlap{\qquad L \in \mathbb{K}^{m \times k}, U \in \mathbb{K}^{k \times n}}

pivot 为 False 时,返回的矩阵 P 将为空。如果 A 的任一主子式为奇异,则不带选主元的 LU 分解可能不存在。在这种情况下,输出矩阵可能包含无穷大或 NaN。

支持输入 float、double、cfloat 和 cdouble 数据类型。也支持矩阵批处理,如果 A 是矩阵批,则输出具有相同的批维度。

参见

使用部分选主元法进行 LU 分解来解决线性方程组。

警告

LU 分解几乎从不唯一,因为通常存在不同的置换矩阵,可以产生不同的 LU 分解。因此,不同的平台,如 SciPy,或不同设备上的输入,可能会产生不同的有效分解。

警告

只有当输入矩阵为满秩时,才支持梯度计算。如果这个条件不满足,不会抛出错误,但梯度可能不是有限的。这是因为带选主元的 LU 分解在这些点不可微。

参数:
  • A(张量)- 形状为(*, m, n)的张量,其中*表示零个或多个批处理维度。

  • pivot(布尔值,可选)- 控制是否使用部分选主元法进行 LU 分解或无选主元分解。默认:True。

关键字参数:

out(元组,可选)- 输出三个张量的元组。如果为 None 则忽略。默认:None。

返回值:

命名元组(P, L, U)。

示例:

>>> A = torch.randn(3, 2)
>>> P, L, U = torch.linalg.lu(A)
>>> P
tensor([[0., 1., 0.],
        [0., 0., 1.],
        [1., 0., 0.]])
>>> L
tensor([[1.0000, 0.0000],
        [0.5007, 1.0000],
        [0.0633, 0.9755]])
>>> U
tensor([[0.3771, 0.0489],
        [0.0000, 0.9644]])
>>> torch.dist(A, P @ L @ U)
tensor(5.9605e-08)

>>> A = torch.randn(2, 5, 7, device="cuda")
>>> P, L, U = torch.linalg.lu(A, pivot=False)
>>> P
tensor([], device='cuda:0')
>>> torch.dist(A, L @ U)
tensor(1.0376e-06, device='cuda:0')

© 版权所有 PyTorch 贡献者。

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

文档

PyTorch 的全面开发者文档

查看文档

教程

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

查看教程

资源

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

查看资源