NumPy 线性代数:矩阵运算与科学计算基础
线性代数是科学计算、数据分析和机器学习的核心基础。矩阵运算、向量点积、矩阵求逆、特征值分解等操作在实际问题中无处不在。NumPy 提供了强大的线性代数工具,能够高效处理大规模矩阵运算。
本文将系统讲解 NumPy 线性代数 的核心功能:
- 向量与矩阵的基本操作
- 点积、内积与外积
- 矩阵转置与逆矩阵
- 行列式与秩
- 特征值与特征向量
- 解线性方程组
1. 向量与矩阵的基本操作
在 NumPy 中,向量和矩阵都使用数组表示:
python
import numpy as np
# 向量
v = np.array([1, 2, 3])
# 矩阵
A = np.array([[1, 2],
[3, 4]])
B = np.array([[5, 6],
[7, 8]])
print("向量 v:", v)
print("矩阵 A:\n", A)
向量 v: [1 2 3]
矩阵 A:
\[1 2
3 4\]
- NumPy 数组既可以表示向量,也可以表示矩阵。
- 使用二维数组表示矩阵,操作方便且效率高。
2. 点积、内积与外积
2.1 向量点积
python
x = np.array([1, 2, 3])
y = np.array([4, 5, 6])
dot_product = np.dot(x, y)
print("点积:", dot_product) # 32
点积: 32
2.2 外积
python
outer_product = np.outer(x, y)
print("外积:\n", outer_product)
外积:
\[ 4 5 6
8 10 12
12 15 18\]
2.3 矩阵乘法
python
C = np.dot(A, B)
print("矩阵乘法 A·B:\n", C)
矩阵乘法 A·B:
\[19 22
43 50\]
注意:*
表示逐元素乘法,而 np.dot()
或 @
表示矩阵乘法。
python
print("逐元素乘法 A*B:\n", A*B)
print("矩阵乘法 A@B:\n", A@B)
逐元素乘法 A*B:
\[ 5 12
21 32\]
矩阵乘法 A@B:
\[19 22
43 50\]
3. 矩阵转置与逆矩阵
矩阵的转置和求逆是线性代数中的基本操作。
3.1 矩阵转置
python
print("矩阵 A 转置:\n", A.T)
矩阵 A 转置:
\[1 3
2 4\]
3.2 矩阵求逆
python
A_inv = np.linalg.inv(A)
print("矩阵 A 的逆矩阵:\n", A_inv)
# 验证 A·A_inv 是否为单位矩阵
print("A·A_inv:\n", A @ A_inv)
矩阵 A 的逆矩阵:
\[-2. 1.
1.5 -0.5\]
A·A_inv:
\[1.0000000e+00 0.0000000e+00
8.8817842e-16 1.0000000e+00\]
提示:只有方阵且行列式非零矩阵才可求逆。
4. 行列式与秩
行列式与秩反映了矩阵的重要性质。
4.1 行列式
python
det_A = np.linalg.det(A)
print("矩阵 A 行列式:", det_A)
矩阵 A 行列式: -2.0000000000000004
4.2 矩阵秩
python
rank_A = np.linalg.matrix_rank(A)
print("矩阵 A 秩:", rank_A)
矩阵 A 秩: 2
行列式为零意味着矩阵不可逆,而矩阵秩则反映了其行或列的线性独立性。
5. 特征值与特征向量
特征分解是 PCA、机器学习、物理建模中常用的工具。
python
eig_vals, eig_vecs = np.linalg.eig(A)
print("特征值:", eig_vals)
print("特征向量:\n", eig_vecs)
特征值: [-0.37228132 5.37228132]
特征向量:
\[-0.82456484 -0.41597356
0.56576746 -0.90937671\]
通过特征分解,可以提取矩阵最重要的方向性信息。
6. 解线性方程组
线性方程组 Ax = b
可以直接使用 np.linalg.solve
求解:
python
A = np.array([[3, 1],
[1, 2]])
b = np.array([9, 8])
x = np.linalg.solve(A, b)
print("方程组解:", x)
# 验证 Ax 是否等于 b
print("验证 Ax:", A @ x)
方程组解: [2. 3.]
验证 Ax: [9. 8.]
相比手动计算逆矩阵再相乘,np.linalg.solve
更快更稳定。
7. 小结
NumPy 线性代数模块提供了强大且高效的矩阵运算工具,包括:
- 矩阵运算:点积、外积、矩阵乘法
- 矩阵特性:转置、逆矩阵、行列式、秩
- 特征分解:特征值与特征向量
- 线性方程组求解 :
np.linalg.solve
这些工具是科学计算、机器学习和数据分析中的核心基础,掌握它们可以为后续算法实现和数值模拟打下坚实基础。