Python3.10.11中IndexError报错原因求助(附代码)
错误原因与解决方案
错误根源
- 索引类型错误:
enumerate(x)返回的是形如(索引整数, x对应元素)的元组,你把这个元组直接赋值给了i,然后用f[i]去索引numpy数组。而numpy数组只接受整数、切片等合法索引,元组不符合要求,所以触发IndexError。 - 维度不匹配:就算索引没问题,
func(x)是把整个x数组传入函数,返回的是一个长度为20的数组,而你试图把这个数组赋值给f的单个位置,也会出现维度不匹配的错误。
修复方案
方案一:修正循环逻辑
把enumerate的结果解包为索引和对应元素,逐个计算赋值:
import pylab as p from scipy.optimize import fsolve def func(x): return p.exp(-x)-x root=fsolve(func,[0]) print("X_true=", root) x=p.linspace(0,1,20) f=x.copy() # 解包索引和x的单个元素 for idx, val in enumerate(x): f[idx] = func(val) p.plot(x,f);p.grid() p.show()
方案二:利用numpy向量化运算(更高效)
numpy支持数组的批量运算,不需要手动循环,直接把整个x数组传入func即可得到对应结果:
import pylab as p from scipy.optimize import fsolve def func(x): return p.exp(-x)-x root=fsolve(func,[0]) print("X_true=", root) x=p.linspace(0,1,20) # 直接传入数组,自动批量计算 f = func(x) p.plot(x,f);p.grid() p.show()
你之前把=改成:没用,是因为问题核心不是赋值方式,而是索引错误和参数传入的问题,这两种方案都能解决你的问题,正常弹出图像。
内容的提问来源于stack exchange,提问作者JENIFER RAMIREZ
相关产品推荐
相关产品推荐

