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

如何解决代码第3行出现的IndexError: index -201越界错误?

解决IndexError: index -201 is out of bounds问题

错误原因

第3行的while循环存在两个致命问题:

  1. 无终止下限:当means_data所有元素都是np.nan或0.0时,ind_end会持续递减到负数,此时ind_end-1会变成-201这类超出数组合法索引的数值(数组长度为200,合法下标范围是0到199,负下标仅支持-1到-200)。
  2. np.nan判断错误:用== np.nan无法识别空值,因为np.nan和任何值比较(包括自身)结果都是False,原逻辑根本检测不到np.nan元素。

修复方案

  • 给while循环添加ind_end > 0的终止条件,彻底避免索引越界
  • 用np.isnan()替代== np.nan,正确检测空值
  • 新增ind_end == 0的极端情况处理,防止后续代码继续报错

修改后的代码

import numpy as np
import matplotlib.pyplot as plt

def treatment_var(means_data, err_data, steps, name):
    ind_end = len(means_data)
    # 修复循环条件:添加索引下限+正确检测np.nan
    while ind_end > 0 and (np.isnan(means_data[ind_end-1]) or means_data[ind_end-1] == 0.0):
        ind_end -= 1
    # 处理所有元素都是nan/0的极端情况
    if ind_end == 0:
        print(f"警告:{name}对应的means_data所有元素都是nan或0.0,无法生成图像")
        return
    plt.errorbar(steps[:ind_end], means_data[:ind_end], yerr=err_data[:ind_end], fmt='o-', color='b')
    if 'baseline' not in name:
        if 'scalar' in name:
            means_b, std_errs_b, steps_b = read_csv_scalar('../eval/eval_scalar_baseline')
        else:
            means_b, std_errs_b, steps_b = load_other('baseline')
        plt.errorbar(steps_b, means_b, yerr=std_errs_b, fmt='o-', color='r', elinewidth=0.8, linewidth=0.8, mew=0.4, ms=4)

    plt.xlabel('Treatment time (h)')
    plt.ylabel('Dose (Gy)')
    plt.xlim((-10, steps[ind_end-1]+10))
    plt.ylim((-0.1, 5.1))
    plt.savefig('tmp/' + name + 'var.pdf', format='pdf')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 14:05:22