Python NumPy 矩阵求逆与伪逆详解

清欢
清欢
发布时间:2026-10-14| 5人浏览过
原创

本文介绍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函数。

以上内容为个人经验总结,仅供参考。如有错误或未考虑周全之处,欢迎指正。

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。