Scipy interp1d外推方法fill_value = tuple无法工作

7
我想要对一个函数进行外推拟合。 scipy.interpolate.interp1d 能够完成此任务(详见文档片段)。 然而,我却收到了 "ValueError: A value in x_new is below the interpolation range." 的错误提示。
使用的是:python 2.7.12、numpy 1.13.3 和 scipy 0.19.1。
填充参数 fill_value:可以是数组或浮点数,用于填充数据范围之外的请求点。如果未提供,则默认为 NaN。 - 如果是两个元素的元组,则第一个元素用作 x_new < x[0] 的填充值,第二个元素用作 x_new > x[-1] 的填充值。任何不是两个元素的元组(例如列表或ndarray,无论其形状如何)都被视为单个数组样式参数,旨在同时用于下限和上限,即 below, above = fill_value, fill_value
import numpy as np
from scipy.interpolate import interp1d
# make a time series
nobs = 10
t = np.sort(np.random.random(nobs))
x = np.random.random(nobs)
# compute linear interp (with ability to extrapolate too)
f1 = interp1d(t, x, kind='linear', fill_value='extrapolate') # this works
f2 = interp1d(t, x, kind='linear', fill_value=(0.5, 0.6)) # this doesn't
1个回答

14
根据文档,当使用interp1d进行外推时,默认会引发ValueError错误,除非你指定了fill_value='extrapolate'或者bounds_error=False。请注意保留HTML标签。
In [1]: f1 = interp1d(t, x, kind='linear', fill_value=(0.5, 0.6), bounds_error=False)

In [2]: f1(0)
Out[2]: array(0.5)

谢谢,Craig。我以为将元组值提供给fill_value会导致它被使用(除非你出于某种原因也明确地设置bounds_error=False)。显然,这不是interp1d的行为。 - John Mahoney

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接