NumPy参考 >例行程序 >线性代数(numpy.linalg) > numpy.linalg.pinv
numpy.linalg.
pinv
(a,rcond = 1e-15,hermitian = False )[源代码] ¶计算矩阵的(Moore-Penrose)伪逆。
使用其奇异值分解(SVD)并包括所有大奇异值来计算矩阵的广义逆 。
在版本1.14中更改:现在可以在矩阵堆栈上进行操作
要伪逆的矩阵或矩阵堆栈。
小奇异值的截止值。小于或等于的奇异值
设置为零。针对矩阵堆栈进行广播。rcond * largest_singular_value
如果为True,则将a假定为Hermitian(如果为实值,则为对称),从而可以更有效地找到奇异值。默认为False。
1.17.0版中的新功能。
的伪逆一个。如果a是矩阵实例,则B也是。
如果SVD计算不收敛。
笔记
表示为的矩阵A的伪逆定义为:“'解决'[最小二乘问题]的矩阵”
,即,如果
说是解,那么
该矩阵就是
。
可以证明,如果是A的奇异值分解,则
,其中
是正交矩阵,
是一个由A的所谓奇异值组成的对角矩阵(通常为零),然后
是对角矩阵由A的奇异值的倒数组成(再次为零)。[1]
参考文献
G.Strang,《线性代数及其应用》,第二版,佛罗里达州奥兰多,Academic Press,Inc.,1980,第139-142页。
例子
以下示例检查和
:a * a+ * a == a
a+ * 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