mindspore.ops.lu_unpack

mindspore.ops.lu_unpack(LU_data, LU_pivots, unpack_data=True, unpack_pivots=True)[source]

Converts LU_data and LU_pivots back into P, L and U matrices, where P is a permutation matrix, L is a lower triangular matrix, and U is an upper triangular matrix. Typically, LU_data and LU_pivots are generated from the LU decomposition of a matrix.

Parameters
  • LU_data (Tensor) – The packed LU factorization data. A Tensor of shape \((*, M, N)\), where \(*\) is batch dimensions. The dim of LU_data must be equal to or greater than 2.

  • LU_pivots (Tensor) – The packed LU factorization pivots. A Tensor of shape \((*, min(M, N))\), where \(*\) is batch dimensions, with data type int8, uint8, int16, int32, int64.

  • unpack_data (bool, optional) – A flag indicating if the LU_data should be unpacked. If False, then the returned L and U are None. Default: True.

  • unpack_pivots (bool, optional) – A flag indicating if the LU_pivots should be unpacked into a permutation matrix P. If False, then the returned P is None. Default: True.

Returns

  • pivots(Tensor) - The permutation matrix of LU factorization. The shape is \((*, M, M)\), the dtype is same as LU_data.

  • L (Tensor) - The L matrix of LU factorization. The dtype is same as LU_data.

  • U (Tensor) - The U matrix of LU factorization. The dtype is same as LU_data.

Raises
  • TypeError – If the dtype of LU_data is int, uint or float.

  • TypeError – If the dtype of LU_pivots is not one of the following: int8, uint8, int16, int32, int64.

  • ValueError – If the dimension of LU_data is less than 2.

  • ValueError – If the dimension of LU_pivots is less than 1.

  • ValueError – If the size of the last dimension of LU_pivots is not equal to the minimum of the sizes of the last two dimensions of LU_data.

  • ValueError – If the batch dimensions of LU_data’s does not match LU_pivots’s batch dimensions.

  • ValueError – On the CPU platform, if the value of LU_pivots are out of range \([1, LU\_data.shape[-2])\).

  • RuntimeError – On the Ascend platform, if the value of LU_pivots are out of range \([1, LU\_data.shape[-2])\).

Supported Platforms:

GPU CPU

Examples

>>> LU_data = Tensor(np.array([[[-0.3806, -0.4872,  0.5536],
...                             [-0.1287,  0.6508, -0.2396],
...                             [ 0.2583,  0.5239,  0.6902]],
...                            [[ 0.6706, -1.1782,  0.4574],
...                             [-0.6401, -0.4779,  0.6701],
...                             [ 0.1015, -0.5363,  0.6165]]]), mstype.float64)
>>> LU_pivots = Tensor(np.array([[1, 3, 3],
...                              [2, 3, 3]]), mstype.int32)
>>> pivots, L, U = ops.lu_unpack(LU_data, LU_pivots)
>>> print(pivots)
[[[1. 0. 0.]
  [0. 0. 1.]
  [0. 1. 0.]]
 [[0. 0. 1.]
  [1. 0. 0.]
  [0. 1. 0.]]]
>>> print(L)
[[[ 1.       0.       0.]
  [-0.1287   1.       0.]
  [ 0.2583   0.5239   1.]]
 [[ 1.0000   0.       0.]
  [-0.6401   1.       0.]
  [ 0.1015  -0.5363   1.]]]
>>> print(U)
[[[-0.3806  -0.4872   0.5536]
  [ 0.       0.6508  -0.2396]
  [ 0.       0.       0.6902]]
 [[ 0.6706  -1.1782   0.4574]
  [ 0.      -0.4779   0.6701]
  [ 0.       0.       0.6165]]]