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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。