NumPy 系列教程:科学计算与数据分析实战
在 Python 科学计算和数据分析的生态系统中,NumPy(Numerical Python) 扮演着基础而关键的角色。它提供了高效的多维数组对象,以及丰富的数值计算函数库。本系列教程共 12 篇,系统讲解了 NumPy 的基础安装、数组操作、数学函数、统计函数、线性代数、广播机制、高效数据处理与图像处理等内容。
01. NumPy入门与数组创建
02. NumPy数组属性详解:形状、维度与数据类型
03. NumPy 文件数据读写:高效的数据存储与加载
04. NumPy 数组索引与切片:高效访问与操作数组
05. NumPy 数组的合并、分割与重塑
06. NumPy 数学函数:高效数值计算
07. NumPy 统计函数详解
08. NumPy 随机数生成与概率分布
09. NumPy 线性代数:矩阵运算与科学计算基础
10. NumPy 广播机制(Broadcasting):高效数组运算
11. NumPy 高效数据处理与优化
12. NumPy 数据分析与图像处理入门
1. NumPy 入门与数组创建
1.1 NumPy 安装与导入
bash
pip install numpy
python
import numpy as np
1.2 一维数组创建
python
import numpy as np
a = np.array([1, 2, 3, 4, 5]) # 从列表创建
b = np.arange(0, 10, 2) # 等差序列 [0, 2, 4, 6, 8]
c = np.linspace(0, 1, 5) # 等间距序列 [0. , 0.25, 0.5 , 0.75, 1.]
1.3 多维数组创建
python
matrix = np.array([[1, 2, 3],
[4, 5, 6]]) # 二维数组
cube = np.ones((3, 3, 3)) # 三维数组,全1
1.4 特殊数组
python
zeros = np.zeros((2, 3)) # 全零数组
ones = np.ones((3, 2)) # 全一数组
identity = np.eye(3) # 单位矩阵
full = np.full((2, 2), 7) # 全7数组
rand = np.random.rand(2, 2) # 随机数组
2. NumPy 数组属性详解
- 形状 :
arr.shape
- 维度 :
arr.ndim
- 大小 :
arr.size
- 数据类型 :
arr.dtype
python
a = np.arange(12).reshape(3, 4)
print(a.shape) # (3, 4) 形状
print(a.ndim) # 2 维度
print(a.size) # 12 元素个数
print(a.dtype) # int64 数据类型
3. NumPy 文件数据读写
3.1 保存数组
python
np.save('array.npy', arr)
np.savez('arrays.npz', arr1=arr, arr2=arr2d)
3.2 读取数组
python
arr_loaded = np.load('array.npy')
arrays_loaded = np.load('arrays.npz')
print(arr_loaded)
print(arrays_loaded['arr1'])
3.3 文本文件读写
python
np.savetxt('data.txt', arr, delimiter=',')
arr_txt = np.loadtxt('data.txt', delimiter=',')
4. NumPy 数组索引与切片
4.1 基础索引
python
a = np.array([[10, 20, 30],
[40, 50, 60]])
print(a[1, 2]) # 60
4.2 基础切片
python
print(a[:1, 1:]) # [[20 30]]
4.3 布尔操作
python
print(a[a > 30]) # [40, 50, 60]
4.4 花式操作
python
print(a[[0, 1], [1, 2]]) # [20, 60]
5. NumPy 数组的合并、分割与重塑
python
a = np.array([[1, 2], [3, 4]])
b = np.array([[5, 6]])
# 合并
print(np.vstack((a, b)))
# [[1 2]
# [3 4]
# [5 6]]
print(np.hstack((a, b.T)))
# [[1 2 5]
# [3 4 6]]
# 分割
print(np.split(np.arange(9), 3))
# [array([0, 1, 2]), array([3, 4, 5]), array([6, 7, 8])]
# 重塑
print(a.reshape(4, 1))
# [[1]
# [2]
# [3]
# [4]]
6. NumPy 数学函数
支持广播和向量化操作
python
x = np.array([1, 2, 3, 4])
print(np.sqrt(x)) # 开方
print(np.exp(x)) # 指数
print(np.log(x)) # 对数
print(np.sin(x)) # 三角函数
7. NumPy 统计函数
数据分析基础必备工具
python
a = np.array([1, 2, 3, 4, 5])
print(np.mean(a)) # 均值
print(np.median(a)) # 中位数
print(np.var(a)) # 方差
print(np.std(a)) # 标准差
8. NumPy 随机数生成
python
rng = np.random.default_rng()
print(rng.random(3)) # [0.1, 0.5, 0.9]
print(rng.integers(0, 10, 5)) # 0-9 随机整数
print(rng.normal(0, 1, 5)) # 标准正态分布
9. NumPy 线性代数
- 矩阵乘法 :
np.dot(A,B)
或A@B
- 转置 :
A.T
- 逆矩阵 :
np.linalg.inv(A)
- 行列式 :
np.linalg.det(A)
- 秩 :
np.linalg.matrix_rank(A)
- 特征值与特征向量 :
np.linalg.eig(A)
- 解线性方程组 :
np.linalg.solve(A,b)
python
A = np.array([[1, 2],
[3, 4]])
print(np.linalg.det(A)) # 行列式
print(np.linalg.inv(A)) # 逆矩阵
eigvals, eigvecs = np.linalg.eig(A)
print(eigvals) # 特征值
10. NumPy 广播机制
- 标量与数组运算自动广播
- 不同形状数组自动扩展
- 高维数组广播
- 广播可用于向量化计算、数据归一化等
python
a = np.array([[1], [2], [3]]) # (3,1)
b = np.array([10, 20, 30]) # (3,)
print(a + b)
# [[11 21 31]
# [12 22 32]
# [13 23 33]]
11. NumPy 高效数据处理与优化
- 向量化:避免循环
- ufuncs :
np.sin()
,np.exp()
等 - 布尔索引:快速筛选修改
- 内存与数据类型优化 :
float32
,int8
python
import time
import numpy as np
N = 10_000_000
a = list(range(N))
b = list(range(N))
# Python 列表
start = time.time()
c = [a[i] + b[i] for i in range(N)]
time_python = time.time() - start
print("Python:", time_python)
# NumPy 向量化
a_np = np.arange(N)
b_np = np.arange(N)
start = time.time()
c_np = a_np + b_np
time_numpy = time.time() - start
print("NumPy:", time_numpy)
# 时间差之比
print("时间比 (Python / NumPy):", time_python / time_numpy)
Python: 1.1597342491149902
NumPy: 0.0395660400390625
时间比 (Python / NumPy): 29.311355090628616
NumPy 数组运算速度往往比 Python 列表快几十倍甚至上百倍。
12. NumPy 数据分析与图像处理入门
12.1 数据分析
python
scores = np.array([[90,85,70],[75,80,85],[60,70,65],[95,90,100]])
print(np.mean(scores, axis=1)) # 学生平均
print(np.mean(scores, axis=0)) # 课程平均
12.2 图像处理
翻转、裁剪、亮度调整均可通过数组操作完成
python
from skimage import data
import matplotlib.pyplot as plt
img = data.astronaut() # 彩色图像
gray = img.mean(axis=2) # 灰度化
plt.imshow(gray, cmap='gray')
plt.show()

13. 总结
本文系统介绍了 NumPy 的核心功能与应用,涵盖数组创建、属性、索引切片、文件操作、数学与统计函数、随机数、线性代数、广播机制及高效数据处理。作为 Python 科学计算的基石,NumPy 在数据分析、机器学习与科研工程中不可或缺。