numpy.linalg.pinv #

利纳尔格。pinv ( a , rcond = 1e-15 , Hermitian = False ) [来源] #

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

使用奇异值分解 (SVD) 并包括所有大奇异值来计算矩阵的广义逆 。

版本 1.14 中的更改:现在可以对矩阵堆栈进行操作

参数
一个(…, M, N) 类数组

要伪逆的矩阵或矩阵堆栈。

rcond (…) 类似 float 的数组

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

Hermitian布尔值,可选

如果为真,则 a被假定为 Hermitian(如果是实值则对称),从而可以使用更有效的方法来查找奇异值。默认为 False。

1.17.0 版本中的新增功能。

返回
B (…, N, M) ndarray

a的伪逆。如果a是实例,则Bmatrix也是实例。

加薪
林算法错误

如果 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,《线性代数及其应用》,第二版,佛罗里达州奥兰多,学术出版社,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