我正在尝试使用scipy.interpolate.interp1d函数创建一个三次样条曲线。我尝试在documentation page上运行示例,但每当我运行它时,我都会收到此错误:
plt.plot(x,y,'o',xnew,f(xnew),' - ',xnew,f2(xnew),' - ')文件 “/Library/Python/2.7/site-packages/scipy-0.12.0.dev_ddd617d_20120920-py2.7-macosx-10.8-x86_64.egg/scipy/interpolate/interpolate.py” 第396行,致电 y_new = self._call(x_new)文件“/Library/Python/2.7/site-packages/scipy-0.12.0.dev_ddd617d_20120920-py2.7-macosx-10.8-x86_64.egg/scipy/interpolate/interpolate.py”, 第372行,在_call_spline中 result = spleval(self._spline,x_new.ravel())文件“/Library/Python/2.7/site-packages/scipy-0.12.0.dev_ddd617d_20120920-py2.7-macosx-10.8-x86_64.egg/scipy/interpolate /interpolate.py” 第835行,在脾脏 res [sl] = _fitpack._bspleval(xx,xj,cvals [sl],k,deriv)IndexError:索引太多
因此,它适用于线性插值,但不适用于立方体。我可能犯了一些愚蠢的错误,但我无法弄清楚出了什么问题。以下是我正在使用的示例的代码:
import numpy as np
from scipy.interpolate import interp1d
x = np.linspace(0, 10, 40)
y = np.cos(-x**2/8.0)
f = interp1d(x, y)
f2 = interp1d(x, y, kind='cubic')
xnew = np.linspace(0, 10, 10)
import matplotlib.pyplot as plt
plt.plot(x,y,'o',xnew,f(xnew),'-', xnew, f2(xnew),'--')
plt.legend(['data', 'linear', 'cubic'], loc='best')
plt.show()
答案 0 :(得分:0)
Elyase是对的。我在我的计算机上切换到了Enthought python发行版 - 在脚本的顶部加入了“#!/ usr / bin / env python”,这使它运行起来。我正在使用的scipy版本一定是个问题。感谢您的快速建议!