回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>我必须用一个旧的,不能推断的版本。
在scipy1.1.0中,外推法按预期工作,给出了正确的结果。
因为我不能在我的应用程序中使用这个,所以我想使用numpy polyfit。
但结果不同,而scipy和bisect的插值结果是相同的。。在</p>
<pre><code>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]
</code></pre>
<p>在====
如何使numpy polyfit/poly1d结果等于scipy外推结果?在</p>