mindspore.ops.pinv

mindspore.ops.pinv(x, *, atol=None, rtol=None, hermitian=False)[源代码]

计算矩阵的(Moore-Penrose)伪逆。

本函数通过SVD计算。如果 \(x=U*S*V^{T}\) ,则x的伪逆为 \(x^{+}=V*S^{+}*U^{T}\)\(S^{+}\) 为对S的对角线上的每个非零元素取倒数,零保留在原位。

支持批量矩阵,若x是批量矩阵,当atol或rtol为float时,则输出具有相同的批量维度。 若atol或rtol为Tensor,则其shape必须可广播到 x.svd() 返回的奇异值的shape。 若x.shape为 \((B, M, N)\) ,atol或rtol的shape为 \((K, B)\) ,则输出shape为 \((K, B, N, M)\)

当hermitian为True时,暂时仅支持实数域,默认输入x为实对称矩阵,因此不会在内部检查x,并且在计算中仅使用下三角部分。 当x的奇异值(或特征值范数,hermitian=True)小于阈值( \(max(atol, \sigma \cdot rtol)\)\(\sigma\) 为最大奇异值或特征值)时,将其置为零,且在计算中不使用。

若rtol和atol均未指定并且x的shape(M, N),则rtol设置为 \(rtol=max(M, N)*\varepsilon\)\(\varepsilon\) 为x.dtype的 eps值 。 若rtol未指定且atol指定值大于零,则rtol设置为零。

说明

该函数在内部使用 svd (或 eigh ,hermitian=True), 所以和这些函数具有相同问题,详细信息请参阅svd()和eigh()中的警告。

参数:
  • x (Tensor) - 要计算的矩阵。支持数据类型为float32或float64。shape为 \((*, M, N)\) ,其中*为零或多个批量维度。

    • hermitian为True时,暂不支持多个批量维度。

关键字参数:
  • atol (float, Tensor) - 绝对公差值。默认值: None

  • rtol (float, Tensor) - 相对公差值。默认值: None

  • hermitian (bool) - 为 True 时求解x为实对称的矩阵。默认值: False

输出:
  • output (Tensor): 类型与输入相同。shape为 \((*, N, M)\) ,其中*为零或多个批量维度。

异常:
  • TypeError - hermitian 不是bool。

  • TypeError - x 不是Tensor。

  • ValueError - x 的维度小于2。

支持平台:

CPU

样例:

>>> x = Tensor([[4., 0.], [0., 5.]], mindspore.float32)
>>> output = ops.pinv(x)
>>> print(output)
[[0.25  0. ]
[0.  0.2 ]]