📚 常用 np.linalg
函数一览
下面是一些最常用的功能和示例:
1. np.linalg.norm()
—— 计算向量或矩阵的范数
python
深色版本
import numpy as npv = np.array([3, 4])
print(np.linalg.norm(v)) # L2 范数(模长): √(3²+4²) = 5.0A = np.array([[1, 2], [3, 4]])
print(np.linalg.norm(A)) # 矩阵Frobenius范数
常用于:计算距离、正则化、归一化。
2. np.linalg.inv()
—— 求矩阵的逆
python
深色版本
A = np.array([[1, 2],[3, 4]])A_inv = np.linalg.inv(A)
print(A_inv)
# 输出:
# [[-2. 1. ]
# [ 1.5 -0.5]]
⚠️ 注意:只能对方阵且可逆的矩阵使用。
3. np.linalg.det()
—— 计算矩阵的行列式
python
深色版本
A = np.array([[1, 2],[3, 4]])
print(np.linalg.det(A)) # 输出: -2.0
4. np.linalg.eig()
—— 求矩阵的特征值和特征向量
python
深色版本
A = np.array([[4, 1],[2, 3]])eigenvalues, eigenvectors = np.linalg.eig(A)
print("特征值:", eigenvalues)
print("特征向量:\n", eigenvectors)
5. np.linalg.solve()
—— 解线性方程组 Ax=bAx=b
python
深色版本
A = np.array([[3, 1],[1, 2]])
b = np.array([9, 8])x = np.linalg.solve(A, b)
print(x) # 输出: [2. 3.] → 表示 x=2, y=3
✅ 这比手动求逆更快更稳定:不要用 np.linalg.inv(A) @ b
,优先用 solve
。
6. np.linalg.svd()
—— 奇异值分解(SVD)
python
深色版本
A = np.array([[1, 2],[3, 4],[5, 6]])U, S, Vt = np.linalg.svd(A)
print("U:", U.shape) # (3, 3)
print("S:", S.shape) # (2,)
print("Vt:", Vt.shape) # (2, 2)
📌 应用:PCA、降维、推荐系统、图像压缩等。
7. np.linalg.matrix_rank()
—— 求矩阵的秩
python
深色版本
A = np.array([[1, 2],[2, 4]]) # 第二行是第一行的倍数print(np.linalg.matrix_rank(A)) # 输出: 1
8. np.linalg.cholesky()
—— 楚列斯基分解(Cholesky)
适用于对称正定矩阵:
python
深色版本
A = np.array([[4, 12, -16],[12, 37, -43],[-16, -43, 98]])L = np.linalg.cholesky(A)
print(L @ L.T) # 应该等于 A
✅ 小贴士:什么时候用 np.linalg
?
场景 | 推荐函数 |
---|---|
向量长度 / 归一化 | np.linalg.norm() |
解方程 Ax=bAx=b | np.linalg.solve() |
矩阵求逆 | np.linalg.inv() (慎用) |
特征分析 | np.linalg.eig() |
降维 / 数据压缩 | np.linalg.svd() |
判断是否满秩 | np.linalg.matrix_rank() |
⚠️ 注意事项
- 所有输入都应为
numpy.ndarray
或能转换成数组的对象。 - 如果矩阵不可逆或接近奇异,
np.linalg.inv()
会报错或结果不稳定。 - 大多数函数都支持批量操作(如形状为
(N, M, M)
的数组)。
✅ 总结
np.linalg
是你进行矩阵运算的瑞士军刀,掌握它就掌握了:
- 线性方程求解
- 矩阵分解
- 范数与距离
- 特征分析
- 数值稳定性处理
🔁 记住口诀:
“要求逆?用 linalg!要解方程?用 solve!要降维?用 svd!”