You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无法绘制多张灰度图:plt.subplots索引错误问题求助

解决子图索引错误 & 灰度图绘制优化

嘿,你的问题出在子图数组的索引方式上!让我给你拆解清楚:

错误原因

当你执行figg, axx = plt.subplots(1,3)时,你创建的是1行3列的子图布局,此时返回的axx是一个一维NumPy数组(形状为(3,)),而不是二维数组。你用axx[1,1]这种二维索引去访问,自然会触发IndexError: too many indices for array——因为一维数组根本没有第二个维度的索引。

而你单独用plt.imshow(X_train_gray[14])能正常运行,是因为这时候没有用到子图数组的索引,直接调用了全局绘图接口。

修正后的绘图代码

把索引改成一维的就可以了,另外记得给灰度图指定cmap='gray',不然Matplotlib会用默认的彩色色映射,显示出来的灰度图颜色会不对:

figg, axx = plt.subplots(1, 3, figsize=(12, 4))  # 可以指定图的大小,更美观

# 用一维索引访问子图
axx[0].imshow(X_train_gray[13], cmap='gray')
axx[1].imshow(X_train_gray[14], cmap='gray')
axx[2].imshow(X_train_gray[15], cmap='gray')

# 可以给每个子图加标题,方便区分
axx[0].set_title('Sample 13')
axx[1].set_title('Sample 14')
axx[2].set_title('Sample 15')

# 去掉子图的坐标轴,让图更干净
for ax in axx:
    ax.axis('off')

# 调整子图间距,避免重叠
plt.tight_layout()
plt.show()

额外小提示

你的灰度转换代码是没问题的,但可以稍微简化一下:

# 简化版灰度转换:直接处理后归一化,不需要先expand_dims再reshape
X_train_gray = np.array([cv2.cvtColor(img, cv2.COLOR_RGB2GRAY) for img in X_train]) / 255.0

这样得到的X_train_gray形状就是(31367, 32, 32),和你原来的结果一致,但代码更简洁。

内容的提问来源于stack exchange,提问作者Yosh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:14:14