scipy.interpolate.interp1d(v0.17.0)中的docs对可选的fill_value参数说了以下内容:
fill_value:...如果是一个双元素元组,则第一个元素用作x_new<的填充值。 x [0],第二个元素用于x_new x [-1]。
因此,我在此代码中传递了一个双元素的tupe:
N=100
x=numpy.arange(N)
y=x*x
interpolator=interp1d(x,y,kind='linear',bounds_error=False,fill_value=(x[0],x[-1]))
r=np.arange(1,70)
interpolator(np.arange(1,70))
但它抛出了ValueError:
ValueError: shape mismatch: value array of shape (2,) could not be broadcast to indexing result of shape (0,1)
任何人都可以指点我在这里做错了什么? 提前感谢您的帮助。
答案 0 :(得分:5)
这是在当前开发版本中已修复的错误:
>>> N = 100
>>> x = np.arange(N)
>>> y = x**2
>>> from scipy.interpolate import interp1d
>>> iii = interp1d(x, y, fill_value=(-10, 10), bounds_error=False)
>>> iii(-1)
array(-10.0)
>>> iii(101)
array(10.0)
>>> scipy.__version__
'0.18.0.dev0+8b07439'
话虽这么说,如果您想要的是左手侧和右手侧的填充值的线性插值,您可以使用np.interp
直接