Python scipy.interpole.interp1d与kind=";“以前的”;不';我们不能像预期的那样推断
前两个Python scipy.interpole.interp1d与kind=";“以前的”;不';我们不能像预期的那样推断,python,scipy,interpolation,Python,Scipy,Interpolation,前两个nan值有意义,但后两个值没有意义,因为前一个值可用 现在如果我使用外推: 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
值有意义,但后两个值没有意义,因为前一个值可用
现在如果我使用外推:
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]
最后两个109.
有意义,但前两个100.
没有意义,因为之前没有值
我想要的输出是直观的
[nannan 105.108.109.109.]
。当然,我可以选择上面的任何一个选项作为基础,并摆弄它。但是有没有一种直接的方法可以获得想要的结果呢?好的,我想这个解决方法还不错:
iterp = interp1d(a, b, kind="previous", fill_value="extrapolate")
print(iterp([-1,-2,5,8,12,25]))
# [100. 100. 105. 108. 109. 109.]
“现在,如果我使用外推:…[t]最后两个109.有意义,但前两个100.不要,因为没有以前的值。”这看起来像一个bug,或者至少是一个丑陋的API疣。在此处报告的@WarrenWeckesser(很高兴您同意:)上为此创建一个问题可能是值得的
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.]