快捷方式

torch.qr

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

計算矩陣或批次矩陣 input 的 QR 分解,並返回一個命名元組 (Q, R),其中 input=QR\text{input} = Q R,Q 是一個正交矩陣或批次正交矩陣,R 是一個上三角矩陣或批次上三角矩陣。

如果 someTrue,則此函式返回瘦 (reduced) QR 分解。否則,如果 someFalse,此函式返回完全 (complete) 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 進行反向傳播,請注意當前的後向實現僅在 input 的前 min(input.size(1),input.size(2))\min(input.size(-1), input.size(-2)) 列線性無關時才良好定義。一旦 QR 支援主元選擇,此行為可能會改變。

注意

此函式對 CPU 輸入使用 LAPACK,對 CUDA 輸入使用 MAGMA,並且在不同的裝置型別或平臺上可能會產生不同的(但有效的)分解結果。

引數
  • input (Tensor) – 輸入張量,尺寸為 (,m,n)(*, m, n),其中 * 表示零個或多個批處理維度,包含尺寸為 m×nm \times n 的矩陣。

  • some (bool, optional) –

    設定為 True 表示瘦 (reduced) QR 分解,設定為 False 表示完全 (complete) QR 分解。如果 k = min(m, n),則

    • some=True : 返回尺寸為 (m, k), (k, n) 的 (Q, R) (預設)

    • 'some=False': 返回尺寸為 (m, m), (m, n) 的 (Q, R)

關鍵字引數

out (tuple, optional) – 包含 Q 和 R 張量的元組。Q 和 R 的尺寸詳情見上文關於 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

文件

訪問 PyTorch 的全面開發者文件

檢視文件

教程

獲取面向初學者和高階開發者的深度教程

檢視教程

資源

查詢開發資源並獲得問題解答

檢視資源