《Python编程、NumPy、Pandas》

一、Python编程:AI开发的基石

1. 为什么Python适合AI?

  • 语法简洁:接近伪代码,降低算法实现复杂度
  • 生态丰富:NumPy/Pandas(数据处理)、PyTorch/TensorFlow(深度学习)
  • 胶水语言:可调用C/CUDA加速关键计算

2. 必须掌握的Python特性

特性

AI应用场景示例

代码片段

列表推导式

快速生成训练数据

[x**2 for x in range(10)]

生成器

流式读取大规模数据集

(line for line in open('data.txt'))

装饰器

计时函数执行(调试模型性能)

@timeit

多进程/线程

数据预处理并行化

multiprocessing.Pool

示例:训练循环模板

for epoch in range(epochs):
    for batch_x, batch_y in dataloader:  # 生成器特性
        pred = model(batch_x)            # 前向传播
        loss = F.cross_entropy(pred, batch_y)
        loss.backward()                  # 反向传播
        optimizer.step()

二、NumPy:科学计算的“发动机”

1. 核心优势

  • 矢量化运算:比纯Python循环快100倍以上
  • 内存效率:连续内存存储,支持零拷贝视图
  • 广播机制:自动扩展数组维度进行计算

2. 关键操作速查

操作

代码示例

AI应用场景

创建数组

np.array([1,2,3], dtype=np.float32)

模型输入数据标准化

随机生成

np.random.normal(0, 1, (3,3))

初始化神经网络权重

矩阵乘法

A @ B 或 np.matmul(A, B)

全连接层实现

形状变换

arr.reshape(2, -1)

图像数据展平(HWC→NCHW)

轴操作

np.sum(arr, axis=1)

计算批次损失

性能对比示例

# 低效的Python循环
result = [a[i] + b[i] for i in range(len(a))]

# 高效的NumPy矢量化
result = np.array(a) + np.array(b)  # 速度提升100x

3. 内存优化技巧

  • 避免副本:使用arr.view()而非arr.copy()
  • 原地操作:np.add(a, b, out=a) 替代 a = a + b
  • 预分配内存:np.empty_like(a) 提前分配结果数组

**三、Pandas:数据处理的“瑞士军刀”

1. 核心数据结构

类型

维度

特点

创建示例

Series

1D

带索引的数组

pd.Series([1,2,3], index=['a','b','c'])

DataFrame

2D

表格型数据(行列索引)

pd.DataFrame({'A': [1,2], 'B': [3,4]})

2. 数据清洗实战

场景:处理CSV格式的鸢尾花数据集

import pandas as pd

# 1. 加载数据
df = pd.read_csv('iris.csv')

# 2. 处理缺失值
df = df.fillna(df.mean())  # 用均值填充数值列

# 3. 特征工程
df['petal_area'] = df['petal_length'] * df['petal_width']

# 4. 分组统计
stats = df.groupby('species').agg(['mean', 'std'])

# 5. 保存结果
stats.to_csv('iris_stats.csv')

3. 高性能技巧

场景

低效方式

高效方式

逐行处理

df.iterrows()

df.apply(lambda x: …)

条件过滤

Python循环

df[df['age'] > 30]

多列计算

逐个列操作

df.eval('A+B*C')


四、NumPy与Pandas的协作

1. 数据流典型 pipeline

CSV/JSON → Pandas清洗 → 转换为NumPy数组 → 输入模型训练

2. 转换接口

# Pandas → NumPy
array = df[['feature1', 'feature2']].values  # 获取NumPy数组

# NumPy → Pandas
df = pd.DataFrame(array, columns=['col1', 'col2'])

3. 混合计算示例

# 用Pandas筛选后,用NumPy加速计算
high_score_users = df[df['score'] > 80]
avg_income = np.mean(high_score_users['income'].values)  # 比Pandas原生mean()更快

五、常见问题与解决方案

1. 内存不足

  • 问题:加载大型CSV文件时崩溃
  • 解决:分块读取 → pd.read_csv('big.csv', chunksize=10000)

2. 性能瓶颈

  • 问题:Pandas操作缓慢
  • 优化:使用dtype指定数据类型(如np.float32)换用pd.eval()或numexpr加速复杂表达式

3. 维度错误

  • 问题:模型输入要求(N, C, H, W)但数据是(H, W, C)
  • 解决:np.transpose(img, (2, 0, 1)) 调整维度顺序

六、知识总结

  • Python是AI开发的入口语言,需掌握其函数式特性与并行能力。
  • NumPy是高性能计算的核心,矢量化操作决定预处理速度。
  • Pandas是数据清洗的利器,熟练使用可节省80%数据准备时间。

关键训练

  1. 用NumPy手动实现全连接层的前向传播
  2. 用Pandas分析股票数据,计算移动平均线
  3. 对比iterrows()与apply()的性能差异
© 版权声明

相关文章

2 条评论

none
暂无评论...