首页/文章/ 详情

使用Python实现数据的一维插值

1年前浏览362

对现有数据进行拟合或插值是数学分析中常见的方式。

  • 通过分析现有数据,得到一个连续的函数(也就是曲线);或者更密集的离散方程与已知数据互相吻合,这个过程叫做拟合

  • 通过已知的、离散的数据点,在范围内推求新数据点的过程或方法则叫做插值

简单来说,插值与拟合最大的区别就是,插值所获得的曲线一定要通过数据点,而拟合需要的是总体上最接近的结果。

所以说要实现插值算法,我们的目标是通过给定的x值和y值,创建一个函数y=f(x),可以在该函数中插入想要的任何值a并获得相应的值y=f(a)。

例如给定x=[0:5:5],y=x^2,在python中画出散点图为







import numpy as npimport matplotlib.pyplot as pltx_data = np.linspace(0,5,5)y_data = x_data**2plt.scatter(x_data,y_data)plt.show()

假如我们想获取x=2的值,可以看到图中没有对应的数据点,因此无法直接获得,所以需要用到插值,而最简单的插值方式为线性插值,就是通过直线连接数据点。

这样通过scipy.interpolate.interp1d()的函数即可进行一维插值。






from scipy.interpolate import interp1dx_data = np.linspace(0,5,5)y_data = x_data**2y_f = interp1d(x_data, y_data, 'linear')print(y_f(2))

通过上述代码使用线性插值,运行代码后求出x=2时y的值为4.375,由于线性插值是通过相邻两点的连线来进行插值,无法考虑到其他数据点,我们都知道x=2时y=x^2的值为4,这里的插值结果明显有问题。

于是使用2次多项式的方式进行插值,可以得到y(2)=4







y_f = interp1d(x_data, y_data,'quadratic')x = np.linspace(0,5,100)y = y_f(x)plt.plot(x,y,'--')plt.show()print(y_f(2))

上述案例的数据较为简单,我们可以轻易地判断插值后的数据是否准确,但是对于复杂的数据,选择合适的插值方式就变得十分重要。

来源:易木木响叮当
python
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2023-06-02
最近编辑:1年前
易木木响叮当
硕士 有限元爱好者
获赞 225粉丝 287文章 355课程 2
点赞
收藏
未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习计划 福利任务
下载APP
联系我们
帮助与反馈