LESSON p.3 · 实验 · 150 分钟
从 NumPy 数组到 PyTorch 张量
从 NumPy 数组到 PyTorch 张量:理解ndarray、shape、axis、broadcast、view/copy、dtype 与 tensor,完成“把循环版 bigram 计数向量化并与 PyTorch 对拍”。属于「零基础先修加速带」学习阶段。
学完你应该能够
- 能用 ndim、shape、axis、size 与 dtype 描述数组。
- 能预测 broadcasting 是否成立并写出结果 shape。
- 能区分切片 view 与显式 copy 对原数组的影响。
- 能让 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 和空序列,记录失败边界。