On this page
torch.linalg.lstsq
- torch.linalg.lstsq(A, B, rcond=None, *, driver=None)
- 
    Computes a solution to the least squares problem of a system of linear equations. Letting be or , the least squares problem for a linear system with is defined as where denotes the Frobenius norm. Supports inputs of float, double, cfloat and cdouble dtypes. Also supports batches of matrices, and if the inputs are batches of matrices then the output has the same batch dimensions. driverchooses the backend function that will be used. For CPU inputs the valid values are‘gels’,‘gelsy’,‘gelsd,‘gelss’. To choose the best driver on CPU consider:- If - Ais well-conditioned (its condition number is not too large), or you do not mind some precision loss.- For a general matrix: ‘gelsy’(QR with pivoting) (default)
- If Ais full-rank:‘gels’(QR)
 
- For a general matrix: 
- If - Ais not well-conditioned.- ‘gelsd’(tridiagonal reduction and SVD)
- But if you run into memory issues: ‘gelss’(full SVD).
 
 For CUDA input, the only valid driver is ‘gels’, which assumes thatAis full-rank.See also the full description of these drivers rcondis used to determine the effective rank of the matrices inAwhendriveris one of (‘gelsy’,‘gelsd’,‘gelss’). In this case, if are the singular values ofAin decreasing order, will be rounded down to zero if . Ifrcond= None(default),rcondis set to the machine precision of the dtype ofAtimesmax(m, n).This function returns the solution to the problem and some extra information in a named tuple of four tensors (solution, residuals, rank, singular_values). For inputsA,Bof shape(*, m, n),(*, m, k)respectively, it contains- solution: the least squares solution. It has shape- (*, n, k).
- residuals: the squared residuals of the solutions, that is, . It has shape equal to the batch dimensions of- A. It is computed when- m > nand every matrix in- Ais full-rank, otherwise, it is an empty tensor. If- Ais a batch of matrices and any matrix in the batch is not full rank, then an empty tensor is returned. This behavior may change in a future PyTorch release.
- rank: tensor of ranks of the matrices in- A. It has shape equal to the batch dimensions of- A. It is computed when- driveris one of (- ‘gelsy’,- ‘gelsd’,- ‘gelss’), otherwise it is an empty tensor.
- singular_values: tensor of singular values of the matrices in- A. It has shape- (*, min(m, n)). It is computed when- driveris one of (- ‘gelsd’,- ‘gelss’), otherwise it is an empty tensor.
 Note This function computes X =A.pinverse() @Bin a faster and more numerically stable way than performing the computations separately.Warning The default value of rcondmay change in a future PyTorch release. It is therefore recommended to use a fixed value to avoid potential breaking changes.- Parameters
- 
      - A (Tensor) – lhs tensor of shape (*, m, n)where*is zero or more batch dimensions.
- B (Tensor) – rhs tensor of shape (*, m, k)where*is zero or more batch dimensions.
- rcond (float, optional) – used to determine the effective rank of A. Ifrcond= None,rcondis set to the machine precision of the dtype ofAtimesmax(m, n). Default:None.
 
- A (Tensor) – lhs tensor of shape 
- Keyword Arguments
- 
      driver (str, optional) – name of the LAPACK/MAGMA method to be used. If None,‘gelsy’is used for CPU inputs and‘gels’for CUDA inputs. Default:None.
- Returns
- 
      A named tuple (solution, residuals, rank, singular_values).
 Examples: >>> A = torch.randn(1,3,3) >>> A tensor([[[-1.0838, 0.0225, 0.2275], [ 0.2438, 0.3844, 0.5499], [ 0.1175, -0.9102, 2.0870]]]) >>> B = torch.randn(2,3,3) >>> B tensor([[[-0.6772, 0.7758, 0.5109], [-1.4382, 1.3769, 1.1818], [-0.3450, 0.0806, 0.3967]], [[-1.3994, -0.1521, -0.1473], [ 1.9194, 1.0458, 0.6705], [-1.1802, -0.9796, 1.4086]]]) >>> X = torch.linalg.lstsq(A, B).solution # A is broadcasted to shape (2, 3, 3) >>> torch.dist(X, torch.linalg.pinv(A) @ B) tensor(1.5152e-06) >>> S = torch.linalg.lstsq(A, B, driver='gelsd').singular_values >>> torch.dist(S, torch.linalg.svdvals(A)) tensor(2.3842e-07) >>> A[:, 0].zero_() # Decrease the rank of A >>> rank = torch.linalg.lstsq(A, B).rank >>> rank tensor([2])
© 2024, PyTorch Contributors
PyTorch has a BSD-style license, as found in the LICENSE file.
 https://pytorch.org/docs/2.1/generated/torch.linalg.lstsq.html