📌 目录
- 什么是
scipy.linalg
? - 常见线性代数操作概览
- 示例:求矩阵的逆
- 示例:解线性方程组 Ax = b
- 示例:特征值与特征向量
- 示例:奇异值分解(SVD)
- 示例:矩阵范数计算
- 出站链接与参考资料
1. 什么是 scipy.linalg
?
scipy.linalg
是 SciPy 提供的线性代数模块,它是 NumPy 的 numpy.linalg
的增强版,底层集成了 LAPACK 和 BLAS 等高性能数值库,功能更全面,计算效率更高。
它支持:
- 矩阵求逆
- 解线性方程组
- 特征值与特征向量
- 奇异值分解(SVD)
- 矩阵范数、秩、行列式等
2. 常见线性代数操作概览
功能 | 函数名 |
---|---|
求逆 | linalg.inv() |
解线性方程组 | linalg.solve() |
特征值与向量 | linalg.eig() |
奇异值分解 | linalg.svd() |
矩阵范数 | linalg.norm() |
行列式 | linalg.det() |
秩 | linalg.matrix_rank() |
3. 示例:求矩阵的逆
import numpy as np
from scipy import linalg
A = np.array([[1, 2], [3, 4]])
A_inv = linalg.inv(A)
print("原始矩阵:\n", A)
print("逆矩阵:\n", A_inv)
4. 示例:解线性方程组 Ax = b
import numpy as np
from scipy.linalg import solve
A = np.array([[2, 1], [1, 3]])
b = np.array([8, 13])
x = solve(A, b)
print("解 x 为:", x)
这表示求解方程组:
2x + y = 8
x + 3y = 13
5. 示例:特征值与特征向量
import numpy as np
from scipy.linalg import eig
A = np.array([[0, -1], [1, 0]])
# 计算特征值和特征向量
eigenvalues, eigenvectors = eig(A)
print("特征值:", eigenvalues)
print("特征向量:\n", eigenvectors)
这个矩阵代表逆时针旋转,特征值是虚数单位 ±i。
6. 示例:奇异值分解(SVD)
import numpy as np
from scipy.linalg import svd
A = np.array([[1, 2], [3, 4], [5, 6]])
# U: 左奇异向量,s: 奇异值,Vh: 右奇异向量的转置
U, s, Vh = svd(A)
print("U 矩阵:\n", U)
print("奇异值:", s)
print("Vh 矩阵:\n", Vh)
SVD 是数据降维、推荐系统、图像压缩中核心方法。
7. 示例:矩阵范数计算
import numpy as np
from scipy.linalg import norm
A = np.array([[1, -2], [-3, 4]])
# 求 Frobenius 范数(默认)
n = norm(A)
print("Frobenius 范数:", n)
# 求 1-范数(列和最大)
n1 = norm(A, 1)
print("1-范数:", n1)
# 求 ∞-范数(行和最大)
n_inf = norm(A, np.inf)
print("∞-范数:", n_inf)
🔗 出站链接与参考资料
🔍 官方资料
scipy.linalg
模块官方文档:
https://docs.scipy.org/doc/scipy/reference/linalg.html- SciPy 线性代数教程 (英文):
https://scipy-lectures.org/advanced/linear_algebra/index.html - LAPACK 官方文档(用于高性能计算):
https://www.netlib.org/lapack/
🎓 学习推荐
- MIT 线性代数公开课(Gilbert Strang 教授):
https://ocw.mit.edu/courses/18-06-linear-algebra-spring-2010/
发表回复