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

Python绘制矩阵时遇IndexError索引越界问题求助

解决IndexError: index 9 is out of bounds的问题

这个错误的核心很清晰:你尝试访问索引9,但你的data数组在第一个维度上只有9个元素——数组索引是从0开始的,所以合法索引范围是0到8,索引9自然就越界了。下面是一步步排查和解决的方法:

1. 定位问题根源

错误出在plt.plot(data[Pdict[name]], label=name)这一行,说明Pdict[name]返回的值是9,而这个值超出了data的索引范围。你可以先在循环里加一行调试代码,看看具体哪个玩家的索引出了问题:

def myplot(data, playerlist = Players):
    print(f"Data的第一维度长度: {data.shape[0]}")  # 打印data的第一维度大小
    for name in playerlist:
        idx = Pdict[name]
        print(f"玩家{name}对应的索引是: {idx}")  # 输出每个玩家的索引
        plt.plot(data[idx], label=name)
    # 其余代码不变

运行后你就能看到哪个玩家的索引是9,这就是问题所在。

2. 修正错误索引

找到那个索引为9的玩家后,去检查Pdict字典的定义,把对应的索引改成0到8之间的有效值。比如如果是字典里的笔误,把8写成了9,修正即可。

3. 修复潜在的刻度不匹配问题

虽然这不是当前报错的原因,但你的plt.xticks(list(range(0,10)), Seasons, rotation='vertical')里用了range(0,10)(10个刻度),如果Seasons的长度是9(和data的维度一致),这里会导致刻度和数据不匹配。建议改成动态匹配的写法:

plt.xticks(list(range(len(Seasons))), Seasons, rotation='vertical')

这样不管Seasons有多少个元素,刻度数量都会自动匹配。

优化后的示例代码

import matplotlib.pyplot as plt

def myplot(data, playerlist = Players):
    # 先确认data的维度信息
    print(f"Data形状: {data.shape}")
    for name in playerlist:
        idx = Pdict[name]
        # 提前检查索引是否合法,避免报错
        if idx < 0 or idx >= data.shape[0]:
            print(f"警告:玩家{name}的索引{idx}超出范围,跳过该玩家")
            continue
        plt.plot(data[idx], label=name)
    plt.legend(loc='upper left', bbox_to_anchor=(1,1))
    plt.xticks(list(range(len(Seasons))), Seasons, rotation='vertical')
    plt.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 03:56:59