为何出现IndexError:索引3650超出轴0范围(大小为3650)?
索引越界错误原因及修复方法
错误原因分析
- 你创建的
TS数组长度为3650(t_end=3650),而Python/numpy数组的索引从0开始,所以有效索引范围是0到3649。 - 循环
for tt in range(0, len(TS))会让tt遍历0到3649的所有整数。当tt取到最后一个值3649时,代码尝试赋值给TS[tt+1]也就是TS[3650],这个索引超出了数组的有效范围,直接触发IndexError。
修复方法
方法一:缩小循环范围
让循环只遍历到数组倒数第二个索引,确保tt+1不会超出数组边界:
t_end = 3650 TS = np.zeros(t_end) TS[0] = 288 # 循环范围改为len(TS)-1,tt最大取到3648,tt+1=3649(数组最后一个有效索引) for tt in range(0, len(TS)-1): TS[tt+1] = TS[tt]+(deltat/cw)*((s0/4)*(1-a_earth)+(ea_new[tt]*sigma*(T_earth**4))-(sigma*TS[tt]**4))
方法二:扩大数组容量
把数组长度设为t_end+1,容纳到索引3650:
t_end = 3650 # 数组长度改为t_end+1,支持索引0到3650 TS = np.zeros(t_end + 1) TS[0] = 288 # 循环范围仍需设为len(TS)-1,避免ea_new数组索引越界 for tt in range(0, len(TS)-1): TS[tt+1] = TS[tt]+(deltat/cw)*((s0/4)*(1-a_earth)+(ea_new[tt]*sigma*(T_earth**4))-(sigma*TS[tt]**4))
注意:使用此方法时需确保ea_new数组的长度至少为3650,否则会触发新的索引错误。
内容的提问来源于stack exchange,提问作者leo
相关产品推荐
相关产品推荐

