torch.linalg.lu¶
- torch.linalg.lu(A, *, pivot=True, out=None)¶
计算矩阵的带部分主元选择的 LU 分解。
设 为 或 ,矩阵 的带部分选主元的 LU 分解定义为
其中 k=min(m,n), 为置换矩阵, 为对角线元素为 1 的下三角矩阵, 为上三角矩阵。
如果
pivot
为 False 且A
位于 GPU 上,则计算不带选主元的 LU 分解当
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')