评价此页

torch.qr#

torch.qr(input: Tensor, some: bool = True, *, out: Union[Tensor, Tuple[Tensor, ...], List[Tensor], None])#

计算矩阵或矩阵批次的QR分解 input,并返回一个命名元组(Q, R),使得 input=QR\text{input} = Q R,其中 QQ 是正交矩阵或正交矩阵批次,而 RR 是上三角矩阵或上三角矩阵批次。

如果 someTrue,则此函数返回痩(约简)QR 分解。否则,如果 someFalse,则此函数返回完整 QR 分解。

警告

torch.qr() 已弃用,推荐使用 torch.linalg.qr(),并且将在未来的 PyTorch 版本中被移除。布尔参数 some 已被字符串参数 mode 取代。

Q, R = torch.qr(A) 应替换为

Q, R = torch.linalg.qr(A)

Q, R = torch.qr(A, some=False) 应替换为

Q, R = torch.linalg.qr(A, mode="complete")

警告

如果您计划通过QR反向传播,请注意,当前的后向实现仅在第一个 min(input.size(1),input.size(2))\min(input.size(-1), input.size(-2)) 列是线性无关时才良定义的。一旦QR支持枢轴,此行为可能会更改。

注意

此函数使用LAPACK处理CPU输入,使用MAGMA处理CUDA输入,并且在不同设备类型或不同平台上可能会产生不同的(但有效的)分解。

参数
  • input (Tensor) – 输入张量,大小为 (,m,n)(*, m, n),其中 * 是零个或多个批处理维度,包含 m×nm \times n 维的矩阵。

  • some (bool, optional) –

    设置为 True 表示约简QR分解,设置为 False 表示完全QR分解。如果 k = min(m, n)

    • some=True:返回 (Q, R),维度为 (m, k), (k, n)(默认)

    • 'some=False':返回 (Q, R),维度为 (m, m), (m, n)

关键字参数

out (tuple, optional) – 包含 QR 张量的元组。 QR 的维度在上面 some 的描述中进行了详细说明。

示例

>>> a = torch.tensor([[12., -51, 4], [6, 167, -68], [-4, 24, -41]])
>>> q, r = torch.qr(a)
>>> q
tensor([[-0.8571,  0.3943,  0.3314],
        [-0.4286, -0.9029, -0.0343],
        [ 0.2857, -0.1714,  0.9429]])
>>> r
tensor([[ -14.0000,  -21.0000,   14.0000],
        [   0.0000, -175.0000,   70.0000],
        [   0.0000,    0.0000,  -35.0000]])
>>> torch.mm(q, r).round()
tensor([[  12.,  -51.,    4.],
        [   6.,  167.,  -68.],
        [  -4.,   24.,  -41.]])
>>> torch.mm(q.t(), q).round()
tensor([[ 1.,  0.,  0.],
        [ 0.,  1., -0.],
        [ 0., -0.,  1.]])
>>> a = torch.randn(3, 4, 5)
>>> q, r = torch.qr(a, some=False)
>>> torch.allclose(torch.matmul(q, r), a)
True
>>> torch.allclose(torch.matmul(q.mT, q), torch.eye(5))
True