scipy.interpolate.interp1d与kind =“ previous”不能按预期外推

时间:2018-12-13 00:58:01

标签: python scipy interpolation

import numpy as np
from scipy.interpolate import interp1d

a = np.arange(10)
b = a + 100

iterp = interp1d(a, b, kind="previous", bounds_error=False)
print(iterp([-1,-2,5,8,12,25]))
# [nan nan  105.  108. nan nan]

前两个nan值有意义,但后两个值则无意义,因为前一个值可用。

现在,如果我使用推断:

iterp = interp1d(a, b, kind="previous", fill_value="extrapolate")
print(iterp([-1,-2,5,8,12,25]))
# [100. 100. 105. 108. 109. 109.]

后两个109.是有意义的,但前两个100.却没有意义,因为没有先前的值。

我要寻找的输出是直观的[nan nan 105. 108. 109. 109.]。当然,我可以将以上任一选项作为基础并加以摆弄。但是,有直接的方法来获得所需的结果吗?

1 个答案:

答案 0 :(得分:2)

好吧,我认为这种解决方法还不错:

iterp = interp1d(a, b, kind="previous", fill_value=(np.nan, b.max()), bounds_error=False)
print(iterp([-1,-2,5,8,12,25]))
# [ nan  nan 105. 108. 109. 109.]