在scipy.interpolate.interp1d中将元组传递给fill_value会导致ValueError

时间:2016-05-04 22:13:51

标签: scipy linear-interpolation

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)

任何人都可以指点我在这里做错了什么? 提前感谢您的帮助。

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 直接