numpy数组索引越界问题求助:生成指定长度c数组
问题分析与解决
错误原因
- 数组索引越界:数组
a只有5个元素(索引范围0-4),但原代码循环中i会取到5(range(1,7)包含1到6),此时访问a[i]就是访问a[5],超出了a的索引范围,触发报错。 - 数组长度不符需求:原代码
imax=7会生成长度为7的c数组,和你要求的6个索引(长度6)不匹配。 - 隐藏越界隐患:原循环中当
i=5时,c_k[i+1]会访问c_k[6],但c_k仅包含6个元素(索引0-5),同样会触发越界错误。
修正方案
按照你的需求(生成6个索引的c数组,a数据无误),调整后的代码如下:
import numpy as np imax = 6 # 改为6,生成长度为6的c数组(索引0-5) Hp = np.array([0.01, 0.01, 0.01, 0.01, 0.01, 0.01]) T = np.array([0. , 0.00023364, 0.00059821, 0.00072914, 0.00071593, 0.00035136]) c_k = np.array([ 0.8977551 , -0.12265306, -0.73489796, -0.93897959, -0.73489796, -0.12265306]) b = np.array([0. , 0. , 0.66156463, 1.03231293, 0.99489796, 0.54931973]) a = np.array([-0. , -0.00023364, -0.00036457, -0.00036457, -0.00035136]) c = np.zeros(imax) # 循环范围改为1到imax,同时将a的索引调整为i-1,匹配a的长度 for i in range(1, imax): c[i]= Hp[i]+T[i]*c_k[i]+a[i-1]*c_k[i+1]-b[i]
说明
- 设置
imax=6,确保c数组生成6个索引(0-5),符合你的需求。 - 循环范围改为
range(1, imax),让i从1到5,避免访问c_k的无效索引。 - 将
a[i]改为a[i-1],刚好能利用a的全部5个元素(索引0-4对应i=1到5),契合你所说的a数据无误的前提。
内容的提问来源于stack exchange,提问作者Kay Khaing Kyaw
相关产品推荐
相关产品推荐

