python插值方法,python 插值函数库
大家好,本文主要讲用Python实现插值算法。有兴趣的同学过来看看,如果对你有帮助记得收藏。
在数学模型竞赛中,往往需要对数据进行处理和分析,但有时数据并不多,需要用一些方法“模拟”出一些可靠的数值来满足需求,这就是插值的作用。本文不再详细介绍各种插值算法的内部原理,直接通过分组交换实现。
现在,我们穿上三件套,看看原始数据的大致情况:
将numpy作为np导入
进口熊猫作为pd
将matplotlib.pyplot作为plt导入
data=pd.read_excel(data.xlsx )
拉格朗日插值算法
原始数据我们采取sin(x)的形式。看一看原始数据点:
导入副本
从scipy.interpolate导入拉格朗日
X=np.linspace(0,10,6) #0~10等差插入11个数,要预测的值。
y=np.sin(x)
X_new=np.linspace(0,10,200) #用于绘制图形。
y_new=np.sin(x_new)
plt.plot(x,y, ro )
plt.plot(x_new,y_new, b )
f1=拉格朗日(x,y)
plt.plot(x,y, ro )
plt.plot(x_new,y_new, b )
plt.plot(x_new,f1(x_new), g )
看一下试衣效果:
分段线性插值
F4=scipy . interpolate . interp1d(x,y,kind=linear )
plt.plot(x,y, ro )
plt.plot(x_new,y_new, b )
plt.plot(x_new,f4(x_new), g )
分段二次(三次)插值
F5=scipy . interpolate . interp1d(x,y,kind= quadratic) #三次是立方。
plt.plot(x,y, ro )
plt.plot(x_new,y_new, b )
plt.plot(x_new,f5(x_new), g )
牛顿插值法:暂未找到相应的库
分段三次埃尔米特插值
F5=scipy . interpolate . interp1d(x,y,kind= quadratic) #三次是立方。
plt.plot(x,y, ro )
plt.plot(x_new,y_new, b )
plt.plot(x_new,f5(x_new), g )
三次样条插值
F3=scipy . interpolate . cubic spline(x,y)
plt.plot(x,y, ro )
plt.plot(x_new,y_new, b )
plt.plot(x_new,f3(x_new), g )
接下来,我们来看一个具体例子的对比:
y=np.array(data)[:1]
x=np.linspace(2009,2018,10)
x_new=np.array([2019,2020,2021])
F2=scipy . interpolate . pchipinterpolator(x,y)
F3=scipy . interpolate . cubic spline(x,y)
#编码:utf-8
PLT . RC params[ font . sans-serif ]=[ sim hei ]#用于正常显示中文标签。
PLT . RC params[ axes . unicode _ MINUS ]=false #用于正常显示负号。
Plt.plot (x,y,color=黑色,marker= o ,label=样本点)
Plt。Plot (x _ new,F2 (x _ new), b-,marker= x ,label= segmented emilt three times )
Plt.plot (x _ new,F3 (x _ new), r-,marker= x ,label=三次样条插值)
PLT。X刻度(范围(2009,2022,1)) #调整X轴间距
plt .图例()
plt.show()
温馨提示:最常用的方法是Hermite三次插值和三次样条插值。
拉格朗日插值虽然在训练集中表现不错,但是在测试集中确实很尴尬,尤其是拟合高阶函数的时候,不要轻易用这个预测。
这就是这篇关于用Python实现插值算法的文章。关于Python插值算法的更多信息,请搜索热门IT软件开发工作室之前的文章或者继续浏览下面的相关文章。希望大家以后多多支持热门IT软件开发工作室!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。