Python interp1d与流式数据?

Python interp1d与流式数据?,python,scipy,interpolation,Python,Scipy,Interpolation,我知道您可以通过引用将数据列表x和y传递给scipy的interp1d。这是否意味着我可以通过简单地修改输入x和y来添加新数据 理想情况下,我正在寻找能够高效完成以下任务的产品: 它为我们要求的某个点插值 根据该插值,我们决定是否获得“真”值 如果获得了真值,我们希望更新算法知识,以便将来进行插值 但是,一旦将这些值放入插值算法中,它们就不会发生变化——只能添加新的点。我认为interp1d对输入数据进行了某种奇特的处理,以加快查找速度,但我不确定这是否会妨碍在适当的位置添加数据。请帮忙 编辑:

我知道您可以通过引用将数据列表
x
y
传递给scipy的
interp1d
。这是否意味着我可以通过简单地修改输入
x
y
来添加新数据

理想情况下,我正在寻找能够高效完成以下任务的产品:

  • 它为我们要求的某个点插值
  • 根据该插值,我们决定是否获得“真”值
  • 如果获得了真值,我们希望更新算法知识,以便将来进行插值
  • 但是,一旦将这些值放入插值算法中,它们就不会发生变化——只能添加新的点。我认为interp1d对输入数据进行了某种奇特的处理,以加快查找速度,但我不确定这是否会妨碍在适当的位置添加数据。请帮忙


    编辑:你们中的一些人可能会注意到,这与大都会黑斯廷斯有很多共同之处,但是,步骤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