torch.lu¶
-
torch.
lu
(*args, **kwargs)¶ Computes the LU factorization of a matrix or batches of matrices
A
. Returns a tuple containing the LU factorization and pivots ofA
. Pivoting is done ifpivot
is set toTrue
.Note
The pivots returned by the function are 1-indexed. If
pivot
isFalse
, then the returned pivots is a tensor filled with zeros of the appropriate size.Note
LU factorization with
pivot
=False
is not available for CPU, and attempting to do so will throw an error. However, LU factorization withpivot
=False
is available for CUDA.Note
This function does not check if the factorization was successful or not if
get_infos
isTrue
since the status of the factorization is present in the third element of the return tuple.Note
In the case of batches of square matrices with size less or equal to 32 on a CUDA device, the LU factorization is repeated for singular matrices due to the bug in the MAGMA library (see magma issue 13).
Note
L
,U
, andP
can be derived usingtorch.lu_unpack()
.Warning
The LU factorization does have backward support, but only for square inputs of full rank.
- Parameters
A (Tensor) – the tensor to factor of size
pivot (bool, optional) – controls whether pivoting is done. Default:
True
get_infos (bool, optional) – if set to
True
, returns an info IntTensor. Default:False
out (tuple, optional) – optional output tuple. If
get_infos
isTrue
, then the elements in the tuple are Tensor, IntTensor, and IntTensor. Ifget_infos
isFalse
, then the elements in the tuple are Tensor, IntTensor. Default:None
- Returns
A tuple of tensors containing
factorization (Tensor): the factorization of size
pivots (IntTensor): the pivots of size .
pivots
stores all the intermediate transpositions of rows. The final permutationperm
could be reconstructed by applyingswap(perm[i], perm[pivots[i] - 1])
fori = 0, ..., pivots.size(-1) - 1
, whereperm
is initially the identity permutation of elements (essentially this is whattorch.lu_unpack()
is doing).infos (IntTensor, optional): if
get_infos
isTrue
, this is a tensor of size where non-zero values indicate whether factorization for the matrix or each minibatch has succeeded or failed
- Return type
(Tensor, IntTensor, IntTensor (optional))
Example:
>>> A = torch.randn(2, 3, 3) >>> A_LU, pivots = torch.lu(A) >>> A_LU tensor([[[ 1.3506, 2.5558, -0.0816], [ 0.1684, 1.1551, 0.1940], [ 0.1193, 0.6189, -0.5497]], [[ 0.4526, 1.2526, -0.3285], [-0.7988, 0.7175, -0.9701], [ 0.2634, -0.9255, -0.3459]]]) >>> pivots tensor([[ 3, 3, 3], [ 3, 3, 3]], dtype=torch.int32) >>> A_LU, pivots, info = torch.lu(A, get_infos=True) >>> if info.nonzero().size(0) == 0: ... print('LU factorization succeeded for all samples!') LU factorization succeeded for all samples!