Table of Contents
Shortcuts

# torch.qr

torch.qr(input, some=True, *, out=None)

  Computes the QR decomposition of a matrix or a batch of matrices `input`, and returns a namedtuple (Q, R) of tensors such that input=Q R\text{input} = Q R input=QR with Q Q Q being an orthogonal matrix or batch of orthogonal matrices and R R R being an upper triangular matrix or batch of upper triangular matrices.

  If `some` is `True`, then this function returns the thin (reduced) QR factorization. Otherwise, if `some` is `False`, this function returns the complete QR factorization.

  Warning

  `torch.qr()` is deprecated in favor of `torch.linalg.qr()` and will be removed in a future PyTorch release. The boolean parameter `some` has been replaced with a string parameter `mode`.

  `Q, R = torch.qr(A)` should be replaced with

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

  `Q, R = torch.qr(A, some=False)` should be replaced with

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

  Warning

  If you plan to backpropagate through QR, note that the current backward implementation is only well-defined when the first min⁡(i n p u t.s i z e(−1),i n p u t.s i z e(−2))\min(input.size(-1), input.size(-2))min(in p u t.s i ze(−1),in p u t.s i ze(−2)) columns of `input` are linearly independent. This behavior will probably change once QR supports pivoting.

  Note

  This function uses LAPACK for CPU inputs and MAGMA for CUDA inputs, and may produce different (valid) decompositions on different device types or different platforms.

  Parameters:

    - input (Tensor) – the input tensor of size (∗,m,n)(*, m, n)(∗,m,n) where * is zero or more batch dimensions consisting of matrices of dimension m×n m \times n m×n.

    - some (bool, optional) –

      Set to `True` for reduced QR decomposition and `False` for complete QR decomposition. If k = min(m, n) then:

      > - `some=True` : returns (Q, R) with dimensions (m, k), (k, n) (default)

      > - `'some=False'`: returns (Q, R) with dimensions (m, m), (m, n)

  Keyword Arguments:

    out (tuple, optional) – tuple of Q and R tensors. The dimensions of Q and R are detailed in the description of `some` above.

  Example:

      >>> 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

## Docs

Access comprehensive developer documentation for PyTorch

View Docs

## Tutorials

Get in-depth tutorials for beginners and advanced developers

View Tutorials

## Resources

Find development resources and get your questions answered

View Resources

To analyze traffic and optimize your experience, we serve cookies on this site. By clicking or navigating, you agree to allow our usage of cookies. As the current maintainers of this site, Facebook’s Cookies Policy applies. Learn more, including about available controls: Cookies Policy.