如何解决代码第3行出现的IndexError: index -201越界错误?
解决IndexError: index -201 is out of bounds问题
错误原因
第3行的while循环存在两个致命问题:
- 无终止下限:当
means_data所有元素都是np.nan或0.0时,ind_end会持续递减到负数,此时ind_end-1会变成-201这类超出数组合法索引的数值(数组长度为200,合法下标范围是0到199,负下标仅支持-1到-200)。 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
相关产品推荐
相关产品推荐

