首页
/ 《深度学习入门》NumPy基础教程:高效科学计算的核心工具

《深度学习入门》NumPy基础教程:高效科学计算的核心工具

2025-07-10 06:23:10作者:翟江哲Frasier

前言

NumPy(Numerical Python)是Python科学计算生态系统的基石,由Travis Oliphant于2005年创建。作为处理多维数组的核心库,NumPy不仅为深度学习提供了高效的数据结构,还成为SciPy、pandas等众多科学计算库的基础依赖。本文将基于《深度学习入门》附录内容,深入解析NumPy的核心功能与应用技巧。

NumPy的核心优势

NumPy的核心数据结构ndarray(n维数组)相比Python原生列表具有显著优势:

  1. 连续内存布局:数据存储在连续内存块中,CPU缓存命中率高
  2. 同质数据类型:所有元素类型相同,避免类型检查开销
  3. 向量化操作:支持对整个数组进行高效数学运算
  4. 广播机制:不同形状数组间的智能运算处理

数组基础操作

数组创建

创建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)

性能优化建议

  1. 避免循环:尽量使用向量化操作替代Python循环
  2. 视图而非复制:使用切片返回视图而非副本节省内存
  3. 预分配内存:对于大型数组,预先分配足够空间
  4. 选择合适数据类型:根据需求选择最小够用的数据类型

结语

NumPy作为Python科学计算的基石,其高效的多维数组操作能力为深度学习提供了坚实基础。掌握NumPy不仅能够提升代码效率,也是理解更高级深度学习框架的关键。本文介绍了NumPy的核心概念和常用操作,建议读者通过实际项目练习来巩固这些知识。