打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
使用Python实现数据的一维插值
userphoto

2023.05.30 江苏

关注

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

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

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

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

所以说要实现插值算法,我们的目标是通过给定的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))

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

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
写SCI论文就用SciPy
Python数据分析库 Scipy库,科学计算与数据分析的利器!
Python进阶之Matplotlib入门(一)
UC头条:Python数据可视化入门:Matplotlib初级使用指南
python插值
4
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服