torch.linalg.lu¶
- torch.linalg.lu(A, *, pivot=True, out=None)¶
计算矩阵的带部分主元策略的 LU 分解。
令 为 或 ,矩阵 的**带部分主元策略的 LU 分解**定义为
其中 k = min(m,n),$P$ 是置换矩阵,$L$ 是对角线上元素为 1 的下三角矩阵,$U$ 是上三角矩阵。
如果
pivot
= False 且A
在 GPU 上,则计算**不带主元策略的 LU 分解**当
pivot
= False 时,返回的矩阵P
将为空。如果A
的任何主子式是奇异的,则不带主元策略的 LU 分解可能不存在。在这种情况下,输出矩阵可能包含 inf 或 NaN。支持 float, double, cfloat 和 cdouble 数据类型的输入。也支持矩阵批量输入,如果
A
是矩阵批量,则输出具有相同的批量维度。另请参阅
torch.linalg.solve()
使用带部分主元策略的 LU 分解求解线性方程组。警告
LU 分解几乎从不唯一,因为通常存在不同的置换矩阵可以产生不同的 LU 分解。因此,不同的平台(如 SciPy)或不同设备上的输入可能会产生不同的有效分解结果。
警告
仅当输入矩阵是满秩时才支持梯度计算。如果不满足此条件,不会抛出错误,但梯度可能不是有限的。这是因为带主元策略的 LU 分解在这些点不可微。
- 参数
- 关键字参数
out (tuple, 可选) – 三个张量的输出元组。如果为 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')