LESSON p.3 · 实验 · 150 分钟

从 NumPy 数组到 PyTorch 张量

从 NumPy 数组到 PyTorch 张量:理解ndarray、shape、axis、broadcast、view/copy、dtype 与 tensor,完成“把循环版 bigram 计数向量化并与 PyTorch 对拍”。属于「零基础先修加速带」学习阶段。

学完你应该能够

  1. 能用 ndim、shape、axis、size 与 dtype 描述数组。
  2. 能预测 broadcasting 是否成立并写出结果 shape。
  3. 能区分切片 view 与显式 copy 对原数组的影响。
  4. 能让 NumPy 与 PyTorch 在同一小输入上得到一致结果。

核心概念

ndarray 与同质数据

ndarray 用固定 dtype 和矩形 shape 表示 N 维数据。限制换来紧凑内存和批量运算;Python 嵌套 list 的灵活性不能直接推断为张量行为。

shape、axis 与 reduce

shape 描述每个轴的长度,axis 指定沿哪一维聚合。任何 sum、mean、softmax 前都先写输入与输出 shape,避免靠运行后猜。

broadcast

从末尾轴向前比较,维度相等或其中一个为 1 才能广播。广播是逻辑扩展,不应误以为一定复制了完整数据。

view 与 copy

NumPy 基本切片通常返回共享数据的 view,修改切片可能改变原数组。跨库转换也可能共享内存;需要独立数据时显式 copy 或 clone。

NumPy → PyTorch

两者共享许多 shape 与广播规则,但 PyTorch tensor 还涉及 device、requires_grad 和计算图。先做数值对拍,再引入梯度。

实践任务

把循环版 bigram 计数向量化并与 PyTorch 对拍

  • 用 4 个 token 手算 3×3 计数矩阵,写出每个 pair 的落点。
  • 分别用 Python 循环、np.add.at 与 torch.index_put_ 实现。
  • 断言 shape、dtype、总计数与逐元素结果完全一致。
  • 更换词表大小、重复 pair 和空序列,记录失败边界。

进入完整互动课程