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

使用Matplotlib绘制华夫图时遇索引越界错误求助

华夫图代码IndexError问题排查与修复

错误根源

  1. 数组索引顺序错误:
    你创建的waffle数组形状是(waffle_hight, waffle_width)(即行数×列数),但赋值时用了waffle[row, col]——内层循环的row遍历的是waffle_width的范围,当waffle_width > waffle_hight时,row会超出数组第一维度(行数)的索引范围,直接触发IndexError: index X is out of bounds for axis 0 with size X。

  2. 循环边界逻辑漏洞:
    若waffle_hight * waffle_width不等于sum(tiles_per_category),category_index会持续递增到超过tiles_per_category的长度,后续访问该列表时会隐含越界风险,同时多余瓷砖无法分配到有效类别。

修复后的完整代码

import numpy as np

tiles_per_category = [212, 334, 1500, 130]
total_tiles = sum(tiles_per_category)

# 自定义华夫图宽高,确保乘积等于总瓷砖数
waffle_hight = 20
waffle_width = total_tiles // waffle_hight

waffle = np.zeros((waffle_hight, waffle_width))
category_index = 0
tile_index = 0

for row in range(waffle_hight):
    for col in range(waffle_width):
        tile_index += 1
        # 切换类别的判断逻辑,添加边界防护
        if tile_index > sum(tiles_per_category[:category_index]):
            if category_index < len(tiles_per_category):
                category_index += 1
        # 修正数组索引顺序(行在前,列在后)
        waffle[row, col] = category_index - 1  # 让类别索引从0开始,匹配列表索引

核心修复说明

  • 修正数组索引:严格遵循numpy数组(行, 列)的访问顺序,避免索引越界。
  • 强制总瓷砖数匹配:确保waffle_hight * waffle_width等于类别瓷砖总和,防止category_index无限递增。
  • 添加边界判断:限制category_index不超过tiles_per_category的长度,彻底避免列表访问越界。
  • 优化索引起始值:将类别索引改为从0开始,更符合Python的索引习惯,便于后续绘图时映射颜色或标签。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 19:23:19