numpy.linalg.pinv

linalg.pinv(a, rcond=1e-15, hermitian=False)[源代码]

计算矩阵的(摩尔-彭罗斯)伪逆矩阵。

利用奇异值分解(SVD)计算矩阵的广义逆,包括 大的 奇异值。

在 1.14 版更改: 现在可以在矩阵的堆栈上操作

参数
a(…,m,n)数组类

要伪反转的矩阵或矩阵堆栈。

rcond(…)类似浮点数的数组

小奇异值的截止值。奇异值小于或等于 rcond * largest_singular_value 设置为零。对矩阵堆栈进行广播。

hermitian可选的布尔

如果属实, a 假设为Hermitian(实值对称),从而可以更有效地找到奇异值。默认为false。

1.17.0 新版功能.

返回
B(…,N,M)标准

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

加薪
LinAlgError

如果SVD计算不收敛。

参见

scipy.linalg.pinv

在SciPy中有类似的功能。

scipy.linalg.pinv2

SciPy中的类似函数(基于SVD)。

scipy.linalg.pinvh

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

笔记

矩阵A的伪逆矩阵,表示为 A^+ ,定义为:“求解的矩阵” [the least-squares problem] 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 是一个对角线矩阵,由一个所谓的奇异值组成(后面通常是零),然后 \Sigma^+ 只不过是由a的奇异值的倒数组成的对角矩阵(同样,后面跟零)。 [1]

工具书类

1

斯特朗 线性代数及其应用 ,第2版,佛罗里达州奥兰多,学术出版社,1980年,第139-142页。

实例

下面的示例检查 a * a+ * a == aa+ * a * a+ == a+

>>> a = np.random.randn(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