为医学影像CNN生成显著性图时遇IndexError错误求助
解决思路
这个错误是因为你创建的子图数量比显著性图的数量少,导致循环访问ax[i]时索引越界。具体解决步骤如下:
先确认图的数量:
先打印出你要绘制的显著性图总数,明确需要的子图最低数量:print(len(saliency_map))动态匹配子图数量:
不要硬写subprot_args参数,根据显著性图的数量动态计算子图布局,比如每行放2个图:num_maps = len(saliency_map) nrows = (num_maps + 1) // 2 # 向上取整,保证子图总数足够覆盖所有显著性图 subprot_args = {'nrows': nrows, 'ncols': 2, 'figsize': (10, 4*nrows)} # 可选调整整体图大小 f, ax = plt.subplots(**subprot_args) # 把多维的子图数组展平成一维,避免多维索引混乱 ax = ax.flatten()循环绘图并处理多余子图:
绘图时如果总子图数多于显著性图数量,把多余的子图隐藏起来:for i in range(num_maps): # 针对单通道医学影像,用squeeze去掉多余的通道维度(比如(H,W,1)转成(H,W)) ax[i].imshow(saliency_map[i].squeeze(), cmap='jet') ax[i].set_title(f'Saliency Map {i+1}') # 可选添加子图标题 ax[i].axis('off') # 去掉坐标轴让图更整洁 # 隐藏未使用的多余子图 for j in range(num_maps, len(ax)): ax[j].axis('off')额外校验:
确认saliency_map的每个元素是2D数组(如(H,W)),如果是3D数组(如(H,W,1)),imshow虽能兼容,但用squeeze()处理后更稳妥。
内容的提问来源于stack exchange,提问作者upaf
相关产品推荐
相关产品推荐

