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) - 输入tensor。shape为 \((*, M, N)\) ,其中*为零或多个批量维度。 hermitian 为
True
时,暂不支持多个批量维度。
- 关键字参数:
atol (float, Tensor) - 绝对容差值。默认
None
。rtol (float, Tensor) - 相对容差值。默认
None
。hermitian (bool) - 是否求解x为实对称的矩阵。默认
False
。
- 输出:
一个shape为 \((*, N, M)\) 的tensor。
- 支持平台:
CPU
样例:
>>> import mindspore >>> x = mindspore.tensor([[4., 0.], [0., 5.]], mindspore.float32) >>> output = mindspore.ops.pinv(x) >>> print(output) [[0.25 0. ] [0. 0.2 ]]