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是实例,则B
matrix
也是实例。
- 加薪:
- 林算法错误
如果 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 == 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