Python interp1d与流式数据?
我知道您可以通过引用将数据列表Python interp1d与流式数据?,python,scipy,interpolation,Python,Scipy,Interpolation,我知道您可以通过引用将数据列表x和y传递给scipy的interp1d。这是否意味着我可以通过简单地修改输入x和y来添加新数据 理想情况下,我正在寻找能够高效完成以下任务的产品: 它为我们要求的某个点插值 根据该插值,我们决定是否获得“真”值 如果获得了真值,我们希望更新算法知识,以便将来进行插值 但是,一旦将这些值放入插值算法中,它们就不会发生变化——只能添加新的点。我认为interp1d对输入数据进行了某种奇特的处理,以加快查找速度,但我不确定这是否会妨碍在适当的位置添加数据。请帮忙 编辑:
x
和y
传递给scipy的interp1d
。这是否意味着我可以通过简单地修改输入x
和y
来添加新数据
理想情况下,我正在寻找能够高效完成以下任务的产品:
编辑:你们中的一些人可能会注意到,这与大都会黑斯廷斯有很多共同之处,但是,步骤1-3可能不会连续发生;因此,我需要一种更抽象的插值方法来支持异步更新。如果你知道任何建议,那就太好了 我认为最简单的方法是编写自己的插值对象:
class Interpolator:
def __init__(self,x,y):
if len(x)!=len(y):
raise BaseException("Lists must have the same length")
self.xlist=x
self.ylist=y
self.len=len(x)
def find_x_index(self,x0): # find index i such that xlist[i]<=x0<xlist[i+1]
a,b=0,self.len-1
while b-a>1:
m=int((b+a)/2)
if x0<self.xlist[m]:
b=m
else:
a=m
return a
def add_point(self,x,y): # add a new point
if x<self.xlist[0]:
self.xlist.insert(0,x)
self.ylist.insert(0,y)
elif x>self.xlist[-1]:
self.xlist.append(x)
self.ylist.append(y)
else:
i=self.find_x_index(x)
self.xlist.insert(i+1,x)
self.ylist.insert(i+1,y)
self.len+=1
def interpolate(self,x0): # interpolates y value for x0
if x0<self.xlist[0] or x0>self.xlist[-1]:
raise BaseException("Value out of range")
a=self.find_x_index(x0)
eps=(x0-self.xlist[a])/(self.xlist[a+1]-self.xlist[a]) # interpolation
return (eps*self.ylist[a+1]+(1-eps)*self.ylist[a])
itp=Interpolator([1,2,3],[1,3,4])
print(itp.interpolate(1.6))
itp.add_point(1.5,3)
print(itp.interpolate(1.6))
类插值器:
定义初始化(self,x,y):
如果len(x)=len(y):
raise BaseException(“列表必须具有相同的长度”)
self.xlist=x
self.ylist=y
self.len=len(x)
def find_x_index(self,x0):#查找索引i,这样xlist[i]这是一个很好的解决方案--实际上我最终做了类似的事情,使用Python的bisect