scipy.interpolate.interp1d with kind="previous" 没有按预期进行推断
scipy.interpolate.interp1d with kind="previous" doesn't extrapolate as expected
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.]
。当然,我可以将上面的任一选项作为基础,然后使用 fiddle。但是有没有直接的方法可以得到想要的结果呢?
好的,我想这个解决方法还不错:
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.]
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.]
。当然,我可以将上面的任一选项作为基础,然后使用 fiddle。但是有没有直接的方法可以得到想要的结果呢?
好的,我想这个解决方法还不错:
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.]