为何Matplotlib手写数字可视化代码中width是数组第一维度?
问题解答
核心原因是你用到的MNIST手写数字数据集的图像都是28×28的等宽高正方形灰度图,原代码的变量命名错误刚好被正方形的特性掩盖了,所以两个版本输出一致。
具体解释
- 你的认知完全正确:Python中用numpy数组存储单通道灰度图时,
img.shape的返回顺序固定为(高度, 宽度),对应数组的(行, 列)维度,你修改后的height, width = img.shape是符合规范的正确写法。 - 原作者的代码属于变量命名失误:他误将第一维度(实际是图像高度)赋值给了
width变量,第二维度(实际是图像宽度)赋值给了height变量。但因为MNIST图像是正方形,高度和宽度的数值完全相等,后续的循环for x in range(width)和for y in range(height)本质都是遍历28次,循环逻辑、索引取值、标注坐标的对应关系都不会出错,因此你看不到输出差异。 - 验证方法:你可以找一张非正方形的单通道灰度图(比如32×64的长方形图像)运行原作者的代码,会立刻出现标注错位、甚至数组索引越界的报错,就能直观看到原代码的命名问题。
内容的提问来源于stack exchange,提问作者R__
相关产品推荐
相关产品推荐

