numpy.linalg.pinv#

linalg.pinv(a, rcond=None, hermitian=False, *, rtol=<no value>)[源代码]#

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

使用矩阵的奇异值分解 (SVD) 计算矩阵的广义逆,并包含所有大的奇异值.

参数:
a(…, M, N) array_like

要进行伪逆的矩阵或矩阵堆栈.

rcond(…) array_like of float, optional

小奇异值的截止值. 小于或等于 rcond * largest_singular_value 的奇异值设置为零. 广播到矩阵堆栈. 默认值: 1e-15 .

hermitianbool,可选

如果为 True,则假定 a 是 Hermitian(如果为实值,则为对称矩阵),从而可以更有效地找到奇异值. 默认为 False.

rtol(…) array_like of float, optional

rcond 相同,但它是一个与 Array API 兼容的参数名称. 只能一次设置 rcondrtol . 如果没有提供任何一个,则使用 NumPy 的 1e-15 默认值. 如果传递 rtol=None ,则使用 API 标准默认值.

在 2.0.0 版本加入.

返回:
B(…, N, M) ndarray

a 的伪逆. 如果 a 是一个 matrix 实例,那么 B 也是.

Raises:
LinAlgError

如果 SVD 计算不收敛.

参见

scipy.linalg.pinv

SciPy 中的类似函数.

scipy.linalg.pinvh

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

注释

矩阵 A 的伪逆,表示为 \(A^+\) ,定义为:"’解决’ [最小二乘问题] \(Ax = b\) 的矩阵",即,如果 \(\bar{x}\) 被称为解,那么 \(A^+\) 就是那个矩阵,使得 \(\bar{x} = A^+b\) .

可以证明,如果 \(Q_1 \Sigma Q_2^T = A\) 是 A 的奇异值分解,那么 \(A^+ = Q_2 \Sigma^+ Q_1^T\) ,其中 \(Q_{1,2}\) 是正交矩阵, \(\Sigma\) 是一个对角矩阵,由 A 的所谓奇异值组成(通常后面跟着零),然后 \(\Sigma^+\) 只是一个对角矩阵,由 A 的奇异值的倒数组成(同样,后面跟着零). [1]

参考文献

[1]

G. Strang, Linear Algebra and Its Applications, 2nd Ed., Orlando, FL, Academic Press, Inc., 1980, pp. 139-142.

示例

以下示例检查 a * a+ * a == aa+ * a * a+ == a+ :

>>> import numpy as np
>>> rng = np.random.default_rng()
>>> a = rng.normal(size=(9, 6))
>>> B = np.linalg.pinv(a)
>>> np.allclose(a, np.dot(a, np.dot(B, a)))
True
>>> np.allclose(B, np.dot(B, np.dot(a, B)))
True