torch.triangular_solve(b, A, upper=True, transpose=False, unitriangular=False, *, out=None)

Solves a system of equations with a square upper or lower triangular invertible matrix AA and multiple right-hand sides bb.

In symbols, it solves AX=bAX = b and assumes AA is square upper-triangular (or lower-triangular if upper= False) and does not have zeros on the diagonal.

torch.triangular_solve(b, A) can take in 2D inputs b, A or inputs that are batches of 2D matrices. If the inputs are batches, then returns batched outputs X

If the diagonal of A contains zeros or elements that are very close to zero and unitriangular= False (default) or if the input matrix is badly conditioned, the result may contain NaN s.

Supports input of float, double, cfloat and cdouble data types.


torch.triangular_solve() is deprecated in favor of torch.linalg.solve_triangular() and will be removed in a future PyTorch release. torch.linalg.solve_triangular() has its arguments reversed and does not return a copy of one of the inputs.

X = torch.triangular_solve(B, A).solution should be replaced with

X = torch.linalg.solve_triangular(A, B)
  • b (Tensor) – multiple right-hand sides of size (,m,k)(*, m, k) where * is zero of more batch dimensions

  • A (Tensor) – the input triangular coefficient matrix of size (,m,m)(*, m, m) where * is zero or more batch dimensions

  • upper (bool, optional) – whether AA is upper or lower triangular. Default: True.

  • transpose (bool, optional) – solves op(A)X = b where op(A) = A^T if this flag is True, and op(A) = A if it is False. Default: False.

  • unitriangular (bool, optional) – whether AA is unit triangular. If True, the diagonal elements of AA are assumed to be 1 and not referenced from AA. Default: False.

Keyword Arguments

out ((Tensor, Tensor), optional) – tuple of two tensors to write the output to. Ignored if None. Default: None.


A namedtuple (solution, cloned_coefficient) where cloned_coefficient is a clone of AA and solution is the solution XX to AX=bAX = b (or whatever variant of the system of equations, depending on the keyword arguments.)


>>> A = torch.randn(2, 2).triu()
>>> A
tensor([[ 1.1527, -1.0753],
        [ 0.0000,  0.7986]])
>>> b = torch.randn(2, 3)
>>> b
tensor([[-0.0210,  2.3513, -1.5492],
        [ 1.5429,  0.7403, -1.0243]])
>>> torch.triangular_solve(b, A)
solution=tensor([[ 1.7841,  2.9046, -2.5405],
        [ 1.9320,  0.9270, -1.2826]]),
cloned_coefficient=tensor([[ 1.1527, -1.0753],
        [ 0.0000,  0.7986]]))


Access comprehensive developer documentation for PyTorch

View Docs


Get in-depth tutorials for beginners and advanced developers

View Tutorials


Find development resources and get your questions answered

View Resources