python线性插值法,python 插值函数库

  python线性插值法,python 插值函数库

  我想到了一个相当优雅的解决方案(IMHO),所以忍不住贴了出来。从等分导入等分_左

  类间隔(对象):

  def __init__(self,x_list,y_list):

  Ifany(y-x=0forx,yinzip(x_list,x_list[1:])):

  raisevalueerror(x _ listmustbeinstrictlyascendingorder!)

  x_list=self.x_list=map(float,x_list))。

  y_list=self.y_list=map(float,y_list))。

  intervals=zip(x_list,x_list[1:],y_list,y_list[1:])

  自斜率=[(y2-y1 )/(x2 - x1)对于间隔中的x1,x2,y1,y2]

  def __getitem__(self,x):

  I=二等分_左(self.x_list,x )- 1

  return self . y _ list[I]self . slopes[I]*(x-self . x _ list[I])

  我映射到浮点。这样,当x1、x2、y1、y2都是特定iterval的整数时,整数除法运算(pythonlt;=2.7)不要让事情开始和破坏。

  __getitem__利用self.x_的列表按升序排序的事实,通过使用二等分_左快速(非常)增加self.x _列表中最大元素的索引。

  使用这个类:I=interpolate [1,2.5,3.4,5.8,6],[2,4,5.8,4.3,4])

  # gettheinterpolatedvalueatx=4:

  y=i[4]

  为了简单起见,我从未处理过边界条件。实际上,i[x]中x ^ 1从[2.5,4]到[1,2]的直线延伸到负无穷大,x==1或x ^ 6中i[x]的行为类似于索引错误。在所有情况下,最好提出索引器的错误,但这留给读者作为练习。() )

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: