lu

paddle.linalg. lu ( x, pivot=True, get_infos=False, name=None ) tuple[Tensor, Tensor] | tuple[Tensor, Tensor, Tensor] [source]

Computes the LU factorization of an N-D(N>=2) matrix x.

Returns the LU factorization(inplace x) and Pivots. low triangular matrix L and upper triangular matrix U are combined to a single LU matrix.

Pivoting is done if pivot is set to True. P mat can be get by pivots:

ones = eye(rows) #eye matrix of rank rows
for i in range(cols):
    swap(ones[i], ones[pivots[i]])
return ones
Parameters
  • X (Tensor) – the tensor to factor of N-dimensions(N>=2). Its data type should be float32, float64, complex64, or complex128.

  • pivot (bool, optional) – controls whether pivoting is done. Default: True.

  • get_infos (bool, optional) – if set to True, returns an info IntTensor. Default: False.

  • name (str|None, optional) – Name for the operation (optional, default is None). For more information, please refer to api_guide_Name.

Returns

factorization (Tensor), LU matrix, the factorization of input X.

pivots (IntTensor), the pivots of size(*(N-2), min(m,n)). pivots stores all the intermediate transpositions of rows. The final permutation perm could be reconstructed by this, details refer to upper example.

infos (IntTensor, optional), if get_infos is True, this is a tensor of size (*(N-2)) where non-zero values indicate whether factorization for the matrix or each minibatch has succeeded or failed.

Examples

>>> import paddle

>>> x = paddle.to_tensor([[1.0, 2.0], [3.0, 4.0], [5.0, 6.0]]).astype('float64')
>>> lu,p,info = paddle.linalg.lu(x, get_infos=True)

>>> print(lu)
Tensor(shape=[3, 2], dtype=float64, place=Place(cpu), stop_gradient=True,
[[5.        , 6.        ],
 [0.20000000, 0.80000000],
 [0.60000000, 0.50000000]])
>>> print(p)
Tensor(shape=[2], dtype=int32, place=Place(cpu), stop_gradient=True,
[3, 3])
>>> print(info)
Tensor(shape=[], dtype=int32, place=Place(cpu), stop_gradient=True,
0)

>>> P,L,U = paddle.linalg.lu_unpack(lu,p)

>>> print(P)
Tensor(shape=[3, 3], dtype=float64, place=Place(cpu), stop_gradient=True,
[[0., 1., 0.],
 [0., 0., 1.],
 [1., 0., 0.]])
>>> print(L)
Tensor(shape=[3, 2], dtype=float64, place=Place(cpu), stop_gradient=True,
[[1.        , 0.        ],
 [0.20000000, 1.        ],
 [0.60000000, 0.50000000]])
>>> print(U)
Tensor(shape=[2, 2], dtype=float64, place=Place(cpu), stop_gradient=True,
[[5.        , 6.        ],
 [0.        , 0.80000000]])

>>> # one can verify : X = P @ L @ U ;