TheZTHEZ / UNDERSTANDING FIRST
项目开发入门13 分钟阅读

NumPy 矩阵运算:从公式到一行代码

掌握矩阵计算、形状检查与偏置广播。

准备数组与环境

需要 Python 3 和 NumPy。若尚未安装,可执行 python -m pip install numpy。数组具有统一形状与数值类型:

import numpy as np

A = np.array([[1, 2], [3, 4]], dtype=float)
B = np.array([[2, 0], [1, 3]], dtype=float)
C = A @ B
assert C.shape == (2, 2)
assert np.allclose(C, [[4, 6], [10, 12]])

对于二维数组,@ 是矩阵乘法,* 是逐元素乘法。A * B 得到 [[2, 0], [3, 12]],并非行列内积。

一行一个样本

若 X∈RN×dX\in\mathbb R^{N\times d},权重 W∈Rd×hW\in\mathbb R^{d\times h},则 XW∈RN×hXW\in\mathbb R^{N\times h}。

import numpy as np

X = np.array([[1., 2.], [3., 4.], [5., 6.]])
W = np.array([[1., 0., -1.], [0., 2., 1.]])
Y = X @ W
assert Y.shape == (3, 3)
assert np.allclose(Y[0], [1, 4, 1])

形状检查比“没报错”更有意义。方阵时,错误转置也可能运行成功,却产生错误语义。

广播与偏置

import numpy as np

X = np.array([[1., 2.], [3., 4.]])
W = np.eye(2)
b = np.array([10., 20.])
Y = X @ W + b
assert np.allclose(Y, [[11, 22], [13, 24]])

长度为 2 的偏置沿最后一个维度对齐,每行增加同一向量。广播从末尾对齐:维度相等或其中一个为 1,才允许匹配。

数值比较

浮点比较常用 np.allclose,但应根据任务选定绝对和相对容差。它不自动证明误差可接受,尤其在数值很小的场景。随机实验可用 np.random.default_rng(42) 固定种子,方便复现。

练习与关联

XX 为 32×832\times8、WW 为 8×48\times4 时,偏置长度为 4,输出为 32×432\times4。使用随机数组验证,再改变 WW 第一维观察错误。

这已经是线性层的核心计算。库函数不会改变数学规则,只会更高效地执行它。

这一节,你理解到哪里了?

这是你的自我反馈,与练习估计、课程进度分别记录。

本文为TheZ原创教学内容。正文采用 CC BY-NC-SA 4.0,代码采用 MIT 许可。请尊重署名与授权范围。