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设置为零。
- 参数:
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 ]]