Python NumPy 矩阵求逆与伪逆详解
本文介绍Python中如何使用NumPy库计算矩阵的逆与伪逆。详细解析可逆矩阵的条件、Singular matrix(奇异矩阵)不可求逆的限制,以及inv与pinv函数的区别。通过代码示例展示非奇异矩阵求逆及奇异/非方阵求伪逆的具体操作,帮助开发者掌握正确的矩阵运算方法。
直接通过代码示例进行说明。
import numpy as np
kernel = np.array([1, 1, 1, 2]).reshape((2, 2))
print(kernel)
print(np.linalg.inv(kernel))

需要注意,Singular matrix(奇异矩阵)无法计算逆矩阵。

补充说明:在Python结合NumPy的环境中,矩阵的逆与伪逆存在具体差异。
定义说明:
若存在矩阵B,满足AB=BA=E(E为与A、B同维数的单位矩阵),则称A为可逆矩阵,B为A的逆矩阵(此处指凯利逆)。
矩阵A可逆的充要条件是其行列式|A|≠0。
伪逆矩阵是逆矩阵的推广形式。对于奇异矩阵或非方阵,由于不存在常规逆矩阵,可通过函数pinv(A)计算其伪逆矩阵。
基本语法为X=pinv(A)或X=pinv(A,tol),其中tol为误差阈值,计算公式为max(size(A))*norm(A)*eps。
该函数返回一个与A的转置矩阵A'同型的矩阵X,且满足:AXA=A,XAX=X。此时称X为矩阵A的伪逆,亦称广义逆矩阵。
pinv(A)具备inv(A)的部分特性,但二者并不完全等同。
当A为非奇异方阵时,pinv(A)的结果等于inv(A),但pinv(A)会消耗更多计算时间,相比之下inv(A)效率更高。
具体代码实现如下:
1. 矩阵求逆操作
import numpy as np
a = np.array([[1, 2], [3, 4]]) # 初始化一个非奇异矩阵(数组)
print(np.linalg.inv(a)) # 对应于MATLAB中 inv() 函数
# 矩阵对象可以通过 .I 求逆,但必须先使用matirx转化
A = np.matrix(a)
print(A.I)
2. 矩阵求伪逆操作
import numpy as np
# 定义一个奇异阵 A
A = np.zeros((4, 4))
A[0, -1] = 1
A[-1, 0] = -1
A = np.matrix(A)
print(A)
# print(A.I) 将报错,矩阵 A 为奇异矩阵,不可逆
print(np.linalg.pinv(A)) # 求矩阵 A 的伪逆(广义逆矩阵),对应于MATLAB中 pinv() 函数
以上即为矩阵逆与伪逆的主要区别。
截至2020年10月4日,matrix函数仍可使用,但已处于过时状态,建议改用mat函数。
以上内容为个人经验总结,仅供参考。如有错误或未考虑周全之处,欢迎指正。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













