《深度学习入门》NumPy基础教程:高效科学计算的核心工具
2025-07-10 06:23:10作者:翟江哲Frasier
前言
NumPy(Numerical Python)是Python科学计算生态系统的基石,由Travis Oliphant于2005年创建。作为处理多维数组的核心库,NumPy不仅为深度学习提供了高效的数据结构,还成为SciPy、pandas等众多科学计算库的基础依赖。本文将基于《深度学习入门》附录内容,深入解析NumPy的核心功能与应用技巧。
NumPy的核心优势
NumPy的核心数据结构ndarray
(n维数组)相比Python原生列表具有显著优势:
- 连续内存布局:数据存储在连续内存块中,CPU缓存命中率高
- 同质数据类型:所有元素类型相同,避免类型检查开销
- 向量化操作:支持对整个数组进行高效数学运算
- 广播机制:不同形状数组间的智能运算处理
数组基础操作
数组创建
创建NumPy数组最直接的方式是使用np.array()
函数:
import numpy as np
# 从列表创建二维数组
arr_2d = np.array([[1, 2, 3], [4, 5, 6]])
print(arr_2d)
数组属性
NumPy数组提供多个实用属性来获取数组信息:
print("数据类型:", arr_2d.dtype) # 元素数据类型
print("元素大小(字节):", arr_2d.itemsize) # 单个元素占用字节数
print("元素总数:", arr_2d.size) # 数组总元素数
print("维度数:", arr_2d.ndim) # 数组维度
print("形状:", arr_2d.shape) # 各维度大小
特殊数组创建
NumPy提供了多种便捷的数组创建方法:
# 全1数组
ones_arr = np.ones((3, 3))
# 全0数组
zeros_arr = np.zeros((3, 3))
# 单位矩阵
eye_arr = np.eye(3)
# 从生成器创建
gen = (x for x in range(10) if x % 2)
from_gen = np.fromiter(gen, dtype=int)
数组索引与切片
NumPy提供了灵活的索引机制:
arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
# 基本索引
print(arr[0, 1]) # 输出2
# 切片
print(arr[:, 1:3]) # 获取所有行的第2-3列
# 布尔索引
mask = arr > 5
print(arr[mask]) # 输出大于5的元素
数组运算与广播
数学运算
NumPy支持各种数学运算:
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
# 逐元素运算
print(a + b) # 加法
print(a * b) # 乘法
print(np.sin(a)) # 三角函数
广播机制
广播是NumPy的强大特性,允许不同形状数组进行运算:
a = np.array([[1], [2], [3]]) # 3x1
b = np.array([4, 5, 6]) # 3,
print(a + b) # 广播为3x3
线性代数运算
NumPy提供丰富的线性代数功能:
A = np.array([[1, 2], [3, 4]])
B = np.array([[5, 6], [7, 8]])
# 矩阵乘法
print(np.dot(A, B))
# 矩阵转置
print(A.T)
# 行列式计算
print(np.linalg.det(A))
数组重塑与合并
arr = np.arange(9)
# 重塑
reshaped = arr.reshape(3, 3)
# 展平
flattened = reshaped.flatten()
# 数组拼接
a = np.array([1, 2])
b = np.array([3, 4])
print(np.concatenate([a, b]))
随机数生成
NumPy的随机模块功能强大:
# 均匀分布
uniform = np.random.uniform(0, 1, size=5)
# 正态分布
normal = np.random.normal(0, 1, size=5)
# 随机整数
randint = np.random.randint(0, 10, size=5)
性能优化建议
- 避免循环:尽量使用向量化操作替代Python循环
- 视图而非复制:使用切片返回视图而非副本节省内存
- 预分配内存:对于大型数组,预先分配足够空间
- 选择合适数据类型:根据需求选择最小够用的数据类型
结语
NumPy作为Python科学计算的基石,其高效的多维数组操作能力为深度学习提供了坚实基础。掌握NumPy不仅能够提升代码效率,也是理解更高级深度学习框架的关键。本文介绍了NumPy的核心概念和常用操作,建议读者通过实际项目练习来巩固这些知识。