torch.qr¶
- torch.qr(input: Tensor, some: bool = True, *, out: Union[Tensor, Tuple[Tensor, ...], List[Tensor], None])¶
計算矩陣或一批矩陣
input
的 QR 分解,並返回一個名為 (Q, R) 的 tensors 的 namedtuple,使得 ,其中 是一個正交矩陣或一批正交矩陣,而 是一個上三角矩陣或一批上三角矩陣。如果
some
為True
,則此函數返回精簡(reduced)的 QR 分解。 否則,如果some
為False
,則此函數返回完整的 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
的前 個列是線性獨立的時候,目前的 backward 實作才被明確定義。 一旦 QR 支援 pivoting,此行為可能會改變。注意
此函數對 CPU 輸入使用 LAPACK,對 CUDA 輸入使用 MAGMA,並且可能在不同的設備類型或不同的平台上產生不同的(有效的)分解。
- 參數
- 關鍵字參數
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