我必须用一个旧的,不能推断的版本。 在scipy1.1.0中,外推法按预期工作,给出了正确的结果。 因为我不能在我的应用程序中使用这个,所以我想使用numpy polyfit。 但结果不同,而scipy和bisect的插值结果是相同的。。在
class InterExtraPolate(object):
def __init__(self, x_list, y_list):
if any(y - x <= 0 for x, y in zip(x_list, x_list[1:])):
raise ValueError("x_list must be in strictly ascending order!")
self.x_list = map(float, x_list)
self.y_list = map(float, y_list)
def __getitem__(self, x):
from scipy import interpolate
f=interpolate.interp1d(self.x_list,self.y_list, fill_value='extrapolate')
return f(x)
class npInterExraPolate(object):
def __init__(self, x_list, y_list):
import numpy as np
if any(y - x <= 0 for x, y in zip(x_list, x_list[1:])):
raise ValueError("x_list must be in strictly ascending order!")
self.x_list = map(float, x_list)
self.y_list = map(float, y_list)
self.fit=np.polyfit(self.x_list,self.y_list, 1)
def __getitem__(self, x):
import numpy as np
f=np.poly1d(self.fit)
return f(x)
##Main
ie = InterExtraPolate([1, 2.5, 3.4, 5.8, 6], [2, 4, 5.8, 4.3, 4])
npie = npInterExraPolate([1, 2.5, 3.4, 5.8, 6], [2, 4, 5.8, 4.3, 4])
my_xl = [0.5,1.1,6.3]
print ie[my_xl]
print npie[my_xl]
在==== 如何使numpy polyfit/poly1d结果等于scipy外推结果?在
我解决了我的需要使用平分_左,并添加外推部分在同一个斜坡作为外坡。。在
如果绘制实际结果,您将很快看到为什么线性插值不是线性拟合:插值是逐点进行的,而拟合会将所有点都考虑在内:
这并不能解释如何正确地执行它,但应该解释为什么它失败了。在
我看不出用多项式拟合代替插值的方法,结果完全一样。在
您要么自己编写插值代码,要么想办法安装一个更新版本的SciPy。在
对于初学者来说,在安装SciPy时看看是否可以使用
user
选项。你没有提到为什么必须使用旧版本,以及是什么阻止了你安装新版本。这可能是另一个需要问的问题:如何规避安装最新版本SciPy的限制。在相关问题 更多 >
编程相关推荐