scipy.interpolate.interp1d
的文档没有说明当x
参数中存在联系时会发生什么。我的实验表明,当请求精确的x值时,它返回最右边的一个,并在插值时使用最接近的值:
from scipy.interpolate import interp1d
temp = interp1d([0, 1, 1, 2], [1, 2, 3, 4])
temp(0.5) # 1.5
temp(1) # 3.0
temp(1.5) # 3.5
内插器的设计能保证吗?
答案 0 :(得分:1)
interp1d
在scipy/interpolate/interpolate.py
中定义。对于默认的'线性'它似乎有两种选择。
# Check if we can delegate to numpy.interp (2x-10x faster).
if (not np.issubdtype(self.y.dtype, np.complexfloating) and
self.y.ndim == 1 and
not _do_extrapolate(fill_value)):
self._call = self.__class__._call_linear_np
else:
self._call = self.__class__._call_linear
call_linear_np
确实:
np.interp(x_new, self.x, self.y)
该函数调用编译代码。文档谈到期望xp
增加,但实际上并没有检查这个。
def _call_linear(self, x_new):
似乎是所有Python,你可以学习。
您所描述的是我对线性插值所期望的。但请记住,此代码与浮点数一起运行,并且“完全相同”'浮动不保证。
答案 1 :(得分:1)
不,不能保证。
x
值中存在关联时插值器的行为未定义,并且可能在scipy版本之间发生变化。 (插值类型和数组中的位置也是关系)。