上一章 目录 下一章

第一章:Python编程基础

学习目标

  • 掌握Python基本语法:变量、数据类型、运算符
  • 理解控制流:条件判断(if/else)、循环(for/while)
  • 学会使用NumPy进行高效的数组与矩阵运算
  • 能够使用Matplotlib创建基本的数据可视化图表
  • 为后续机器学习编程打下坚实基础

前置要求

  • 已安装Python 3.10或更高版本
  • 了解基本的编程概念(如变量、函数)
  • 能够使用终端/命令行执行基本命令
Python编程环境配置概念图
图1-1 Python编程环境配置:编辑器、终端与包管理工具的协作关系

Python 环境安装

推荐安装方式

推荐使用 Anaconda 进行安装,它包含了Python解释器和大量科学计算库。访问 anaconda.com/download 下载对应系统的安装包。

Bash - 环境检查与安装
# 检查Python版本
python --version
# 输出: Python 3.10.x 或更高

# 使用pip安装所需库
pip install numpy matplotlib jupyter

# 或者使用conda(如果安装了Anaconda)
conda install numpy matplotlib jupyter

# 启动Jupyter Notebook
jupyter notebook
验证安装

在终端输入 python -c "import numpy; import matplotlib; print('安装成功!')",如果没有报错,说明环境安装成功。

基础语法

变量与数据类型

Python是动态类型语言,变量不需要提前声明类型。以下是常用的数据类型。

Python - 变量与数据类型
# ========== 变量与数据类型 ==========

# 整数 (int)
a = 10
b = -3
print(type(a))  # <class 'int'>

# 浮点数 (float)
pi = 3.14159
learning_rate = 0.001
print(type(pi))  # <class 'float'>

# 字符串 (str)
model_name = "ResNet-50"
description = '深度学习模型'
print(type(model_name))  # <class 'str'>

# 布尔值 (bool)
is_training = True
use_gpu = False
print(type(is_training))  # <class 'bool'>

# 列表 (list) - AI中常用于存储数据集、特征等
layers = ['conv', 'relu', 'pool', 'fc']
losses = [0.9, 0.7, 0.5, 0.3, 0.2]

# 字典 (dict) - AI中常用于存储超参数
hyperparams = {
    'learning_rate': 0.001,
    'batch_size': 32,
    'epochs': 100,
    'optimizer': 'adam'
}

# 元组 (tuple) - 不可变序列
image_shape = (224, 224, 3)  # 高度, 宽度, 通道数

print(f"模型: {model_name}, 学习率: {hyperparams['learning_rate']}")
print(f"图像尺寸: {image_shape[0]}x{image_shape[1]}")

控制流

条件判断和循环是编程的基础,在AI中常用于数据预处理、训练循环等场景。

Python - 控制流
# ========== 条件判断 ==========
accuracy = 0.92

if accuracy >= 0.9:
    print("模型表现优秀!")
elif accuracy >= 0.7:
    print("模型表现良好,仍有提升空间")
else:
    print("模型需要进一步调优")

# ========== for 循环 - 训练循环模拟 ==========
epochs = 5
losses = []

for epoch in range(epochs):
    loss = 1.0 / (epoch + 1)  # 模拟损失递减
    losses.append(loss)
    print(f"Epoch {epoch + 1}/{epochs}, Loss: {loss:.4f}")

# ========== while 循环 - 早停机制模拟 ==========
patience = 3
best_loss = float('inf')
no_improve = 0
current_loss = 0.8

while no_improve < patience:
    if current_loss < best_loss:
        best_loss = current_loss
        no_improve = 0
        print(f"损失改善: {best_loss:.4f}")
    else:
        no_improve += 1
        print(f"未改善 ({no_improve}/{patience})")
    current_loss *= 0.95  # 模拟损失变化

print(f"训练结束,最佳损失: {best_loss:.4f}")

# ========== 列表推导式 - 数据预处理常用 ==========
raw_data = [1.2, 3.4, 5.6, 7.8, 9.0]
normalized = [(x - min(raw_data)) / (max(raw_data) - min(raw_data))
              for x in raw_data]
print(f"归一化结果: {normalized}")
Python小贴士

在AI编程中,列表推导式字典推导式非常常用,它们比传统循环更简洁高效。此外,enumerate()zip() 也是数据处理中的常用函数。

NumPy 基础

NumPy是Python科学计算的核心库,提供了高效的多维数组对象和丰富的数学函数。在AI中,NumPy是几乎所有数据处理和数值计算的基础。

数组创建

Python - NumPy 数组创建
import numpy as np

# ========== 数组创建 ==========
# 从列表创建
a = np.array([1, 2, 3, 4, 5])
print(f"一维数组: {a}, 形状: {a.shape}")

# 创建全零数组(常用于初始化权重)
zeros = np.zeros((3, 4))
print(f"全零数组 (3x4):\n{zeros}")

# 创建全一数组
ones = np.ones((2, 3))
print(f"全一数组 (2x3):\n{ones}")

# 创建单位矩阵(线性代数中常用)
identity = np.eye(3)
print(f"单位矩阵 (3x3):\n{identity}")

# 创建随机数组(常用于初始化神经网络权重)
np.random.seed(42)  # 设置随机种子,保证可复现
random_arr = np.random.randn(3, 3)  # 标准正态分布
print(f"随机数组 (3x3):\n{random_arr}")

# 等间隔数组
x = np.linspace(0, 10, 5)  # [0, 2.5, 5, 7.5, 10]
print(f"等间隔数组: {x}")

# 等差数组
y = np.arange(0, 10, 2)  # [0, 2, 4, 6, 8]
print(f"等差数组: {y}")

矩阵运算

Python - NumPy 矩阵运算
import numpy as np

# ========== 矩阵运算 ==========
A = np.array([[1, 2], [3, 4]])
B = np.array([[5, 6], [7, 8]])

# 矩阵加法
C = A + B
print(f"矩阵加法:\n{C}")

# 矩阵乘法(点积)- AI中最常用的运算
D = A @ B  # 等价于 np.dot(A, B)
print(f"矩阵乘法 A @ B:\n{D}")

# 逐元素乘法(Hadamard积)
E = A * B
print(f"逐元素乘法 A * B:\n{E}")

# 转置
print(f"A的转置:\n{A.T}")

# 矩阵的逆
A_inv = np.linalg.inv(A)
print(f"A的逆矩阵:\n{A_inv}")

# 矩阵的行列式
det = np.linalg.det(A)
print(f"A的行列式: {det:.2f}")

# ========== 广播机制 ==========
# AI中非常重要的特性
x = np.array([[1], [2], [3]])  # 形状 (3, 1)
y = np.array([10, 20, 30])     # 形状 (3,)
result = x + y                 # 广播为 (3, 3)
print(f"广播结果:\n{result}")

# ========== 常用统计运算 ==========
data = np.array([1.2, 3.4, 5.6, 7.8, 9.0])
print(f"均值: {np.mean(data):.2f}")
print(f"标准差: {np.std(data):.2f}")
print(f"最大值: {np.max(data)}, 最小值: {np.min(data)}")
print(f"求和: {np.sum(data)}")
print(f"排序: {np.sort(data)}")
注意

在NumPy中,* 是逐元素乘法,@np.dot() 才是矩阵乘法。在AI编程中,矩阵乘法(@)远比逐元素乘法更常用,务必区分清楚。

Matplotlib 基础

Matplotlib是Python最常用的数据可视化库。在AI中,我们用它来可视化训练过程、数据分布、模型性能等。

折线图 - 训练损失可视化

Python - Matplotlib 折线图
import matplotlib.pyplot as plt
import numpy as np

# 设置中文字体(避免中文显示为方块)
plt.rcParams['font.sans-serif'] = ['SimHei', 'Arial Unicode MS']
plt.rcParams['axes.unicode_minus'] = False

# ========== 折线图:模拟训练过程 ==========
epochs = np.arange(1, 101)
train_loss = 2.0 * np.exp(-0.03 * epochs) + np.random.randn(100) * 0.05
val_loss = 2.2 * np.exp(-0.025 * epochs) + np.random.randn(100) * 0.08

plt.figure(figsize=(10, 6))
plt.plot(epochs, train_loss, 'b-', label='训练损失', linewidth=2)
plt.plot(epochs, val_loss, 'r--', label='验证损失', linewidth=2)
plt.xlabel('Epoch', fontsize=14)
plt.ylabel('Loss', fontsize=14)
plt.title('模型训练过程', fontsize=16)
plt.legend(fontsize=12)
plt.grid(True, alpha=0.3)
plt.tight_layout()
plt.savefig('training_curve.png', dpi=150)
plt.show()

散点图 - 数据分布可视化

Python - Matplotlib 散点图
import matplotlib.pyplot as plt
import numpy as np

plt.rcParams['font.sans-serif'] = ['SimHei', 'Arial Unicode MS']
plt.rcParams['axes.unicode_minus'] = False

# ========== 散点图:两类数据分布 ==========
np.random.seed(42)

# 类别A:以(2, 3)为中心
class_a = np.random.randn(50, 2) * 0.8 + np.array([2, 3])

# 类别B:以(6, 7)为中心
class_b = np.random.randn(50, 2) * 0.8 + np.array([6, 7])

plt.figure(figsize=(8, 6))
plt.scatter(class_a[:, 0], class_a[:, 1],
            c='#4299e1', label='类别 A', alpha=0.7, s=80, edgecolors='white')
plt.scatter(class_b[:, 0], class_b[:, 1],
            c='#e53e3e', label='类别 B', alpha=0.7, s=80, edgecolors='white')
plt.xlabel('特征 1', fontsize=14)
plt.ylabel('特征 2', fontsize=14)
plt.title('二分类数据分布', fontsize=16)
plt.legend(fontsize=12)
plt.grid(True, alpha=0.3)
plt.tight_layout()
plt.savefig('scatter_plot.png', dpi=150)
plt.show()

练习题

[1] 使用NumPy创建一个 5x5 的随机矩阵,计算其转置、逆矩阵和行列式,并验证 \( A \times A^{-1} \) 是否接近单位矩阵。
[2] 给定两组数据 x = [1, 2, 3, 4, 5]y = [2.1, 3.9, 6.2, 7.8, 10.1],使用Matplotlib绘制散点图,并观察它们之间的关系。
[3] 编写一个函数 normalize(data),接收一个NumPy数组,返回Z-score标准化后的结果(公式:\( z = \frac{x - \mu}{\sigma} \)),其中 \(\mu\) 为均值,\(\sigma\) 为标准差。

章节小结

  • Python是AI开发的首选语言,其简洁的语法和丰富的库生态是最大优势
  • NumPy的ndarray是AI数值计算的核心数据结构,掌握数组操作和广播机制至关重要
  • 矩阵乘法(@)是AI计算的基本操作,务必与逐元素乘法(*)区分
  • Matplotlib是数据可视化的基础工具,在分析数据和展示模型性能时不可或缺
  • 设置随机种子(np.random.seed())可以保证实验的可复现性
上一章 目录 下一章