我试图将一个使用自定义插值器(由数学家同事开发)的程序移植到使用scipy提供的插值器上。 我想使用或包装scipy插值器,使其行为尽可能接近旧插值器。
两个函数之间的关键区别在于,在我们的原始插值器中 - 如果输入值高于或低于输入范围,我们的原始插值器将对结果进行外推。 如果您尝试使用scipy插值器执行此操作,它会引发 ValueError
。 请考虑以下示例程序:
import numpy as np
from scipy import interpolate
x = np.arange(0,10)
y = np.exp(-x/3.0)
f = interpolate.interp1d(x, y)
print f(9)
print f(11) # Causes ValueError, because it's greater than max(x)
有没有一种明智的方法,使得最后一行不会崩溃,而是通过线性外推来延续由前两个点和最后两个点定义的渐变到无限远处。请注意,在实际软件中,我并没有使用exp函数 - 这只是为了举例说明!
scipy.interpolate.UnivariateSpline
似乎可以很好地进行外推。 - heltonbiker