线性插值

插值:是根据已知的数据序列(可以理解为你坐标中一系列离散的点),找到其中的规律,然后根据找到的这个规律,来对其中尚未有数据记录的点进行数值估计。
线性插值:是针对一维数据的插值方法。它根据一维数据序列中需要插值的点的左右临近两个数据来进行数值估计。当然了它不是求这两个点数据大小的平均值(在中心点的时候就等于平均值)。而是根据到这两个点的距离来分配比重的。

python实现线性插值

numpy.interp

numpy.interp(x, xp, fp, left=None, right=None, period=None)

参数:

  • x:类似数组,要插值点的横坐标
  • xp:一维浮点数序列,如果未指定参数周期,则数据点的x坐标必须增加 . 否则,在用归一化周期边界之后对xp进行内部排序,xp = xp % period。
  • fp:一维浮点数或复数序列,数据点的y坐标,与xp的长度相同。
  • left:可选择参数。x <xp [0]的返回值,默认值为fp [0]。
  • right:可选择参数。x> xp [-1]的返回值,默认值为fp [-1]。
  • period:设定横坐标的周期,该选项打开时,则忽略left和right。

示例:

import numpy as np
import matplotlib.pyplot as pltxp = [1, 2, 3]
fp = [3, 2, 0]
y = np.interp(2.5, xp, fp)
#1.0y = np.interp([0, 1, 1.5, 2.72, 3.14], xp, fp)
#array([3.  , 3.  , 2.5 , 0.56, 0.  ])UNDEF = -99.0
y = np.interp(3.14, xp, fp, right=UNDEF)
#-99.0#sine 函数插值
x = np.linspace(0, 2*np.pi, 10)
y = np.sin(x)
xvals = np.linspace(0, 2*np.pi, 50)
yinterp = np.interp(xvals, x, y)plt.plot(x, y, 'o')
plt.plot(xvals, yinterp, '-x')
plt.show()#周期 x 坐标的插值
x = [-180, -170, -185, 185, -10, -5, 0, 365]
xp = [190, -190, 350, -350]
fp = [5, 10, 3, 4]
y = np.interp(x, xp, fp, period=360)
#array([7.5 , 5.  , 8.75, 6.25, 3.  , 3.25, 3.5 , 3.75])#复数插值Complex interpolation:
x = [1.5, 4.0]
xp = [2,3,5]
fp = [1.0j, 0, 2+3j]
y = np.interp(x, xp, fp)
#array([0.+1.j , 1.+1.5j])

示例:已知y坐标,求x点。

import numpy as npy = np.array([0, 38.39, 71.41, 99.66, 123.67, 143.88, 160.61, 174.03, 184.16, 190.8, 193.52])
x = np.array([0, 0.37, 0.74, 1.11, 1.48, 1.85, 2.22, 2.59, 2.96, 3.33, 3.7])
plt.plot(x, y, '-')y_val = 30
root = np.interp(y_val, y, x)
print(root)

scipy.interpolate.interp1d

scipy.interpolate.interp1d(x, y, kind='linear', axis=- 1, copy=True, bounds_error=None, fill_value=nan, assume_sorted=False)

参数:

  • x:数值数组。一般是升序排列的x数据点。
  • y:数值数组。与x数据点对应的y坐标,插值维的长度必须与x长度相同。
  • kind:字符串或整数,给出插值的样条曲线的阶数,线性插值用’linear’。‘linear’, ‘nearest’, ‘nearest-up’, ‘zero’, ‘slinear’, ‘quadratic’, ‘cubic’, ‘previous’, or ‘next’. ‘zero’, ‘slinear’, ‘quadratic’ ,‘cubic’。
  • axis:int
  • copy:bool
  • bounds_error:布尔值,越界是否报错,除非fill_value=‘extrapolate’,否则默认越界时报错。
  • fill_value:数组或’extrapolate’,指定不在x范围内时的填充值或填充方法. 当为’extrapolate’时,返回的函数会对落在x范围外的值进行外插。
  • assume_sorted:bool

示例:

x = data['时间']
y = data['浓度']
# 构建完整的时间序列 = [1,23,...23]
xnew = np.linspace(1,23,num=23)# 线性插值
f1 = interp1d(x,y,kind='linear')
ynew1 = f1(xnew)
plt.scatter(x,y,zorder=3)
plt.plot(xnew,ynew1,marker='s',ls='--',c='C1')
plt.legend(['data','线性插值'])
plt.xticks(range(0,24,1))
plt.grid(ls='--',alpha=0.5)
plt.xlabel('A')
plt.ylabel('B')
plt.tight_layout()
plt.show()

示例:

from scipy.interpolate import interp1dx = [1, 2, 3]
y = [3, 2, 0]
f = interp1d(x,y,fill_value=(3,0),bounds_error=False) # 线性内插
out = f([0, 1, 1.5, 2.72, 3.14])
print(out)
#array([3. , 3. , 2.5 , 0.56, 0. ])fe = interp1d(x,y, fill_value='extrapolate') # 线性内插+外插
out = fe([0, 1, 1.5, 2.72, 3.14])
print(out)
#array([ 4. , 3. , 2.5 , 0.56, -0.28])

python实现线性插值相关推荐

  1. python分段线性插值_Python实现分段线性插值

    本文实例为大家分享了Python实现分段线性插值的具体代码,供大家参考,具体内容如下 函数: 算法 这个算法不算难.甚至可以说是非常简陋.但是在代码实现上却比之前的稍微麻烦点.主要体现在分段上. 图像 ...

  2. Python实现线性插值和三次样条插值

    文章目录 (1).函数 (2).数据准备 (3).样条插值 (4).绘图 (5).综合代码 (6).结果展示 关于Python数据分析在数学建模中的更多相关应用:Python数据分析在数学建模中的应用 ...

  3. python分段线性插值_[Python] 分段线性插值

    利用线性函数做插值 每一段的线性函数: #Program 0.6 Linear Interploation import numpy as np import matplotlib.pyplot as ...

  4. python一个函数调用另一个函数中的变量_在Python 中同一个类两个函数间变量的调用方法...

    在Python 中同一个类两个函数间变量的调用方法 更新时间:2019年01月31日 15:44:54 作者:wxy_summer 今天小编就为大家分享一篇在Python 中同一个类两个函数间变量的调 ...

  5. 【20220207】【信号处理】三次样条插值原理详解

    方程组的求解本文不做介绍. 一.三次样条插值 1. 定义 三次样条插值(Cublic Spline Interpolation),简称 Spline 插值,是通过一系列样本点的光滑曲线,数学上通过求解 ...

  6. 光谱响应函数线性内插

    文章目录 0 前言 1 内容 1.1 光谱响应函数 1.2 np.interp()插值处理 1.2.1 np.interp()简介 1.2.2 代码 1.3 使用scipy插值 1.3.1 代码 en ...

  7. 水库水位-库容曲线线性插值python程序

    水位-库容曲线是进行水库调度的基本数据资料.具体用途就是,给定一个水库水位z,求其对应的库容v,或者给定一个库容v,求其对应的水位z.比较靠谱的方法就是线性插值.以下给出一个本人自定义的进行水库水位库 ...

  8. python时间序列进行线性插值_Python实现线性插值和三次样条插值

    (1).函数 y = sin(x) (2).数据准备 #数据准备 X=np.arange(-np.pi,np.pi,1) #定义样本点X,从-pi到pi每次间隔1 Y= np.sin(X)#定义样本点 ...

  9. 对投影值进行线性插值之后再进行滤波反投影的Python实现

    前面一篇文章中我介绍了滤波反投影,实际中我们的扫描都是分立而非连续的,因此我们通常需要对投影值进行插值之后再进行滤波反投影,这样能够获得更好的效果.我现在先把代码贴上来,具体的数学过程过几天再详细讲. ...

最新文章

  1. Hadoop伪分布式配置试用+eclipse配置使用
  2. MHA管理所有数据库服务器
  3. CCNP学习笔记2-路由部分--EIGRP
  4. python输出字符串拼接数字_python实现字符串和数字拼接
  5. Code a simple telnet client using sockets in python
  6. linux没有.brashrc文件,Linux 安装 Redis4.0.6
  7. php fopen 追加,PHP文件写入或追加
  8. Dockerfile镜像创建
  9. html写出带有表格标题的三行三列表格
  10. hive 各种 join (left outer join、join、full outer join)
  11. 在Mac os上使用LaTex
  12. oracle表给用户授权
  13. 使用Linkage Mapper制作环境连接图
  14. en结尾的单词_以ey结尾的英文单词发ei-以en结尾的单词有哪些-以key结尾的英文单词...
  15. opencv+dlib实现给蒙娜丽莎“配”眼镜
  16. 使用jspdf插件将网页中的内容导出为高保真的pdf文件
  17. EAS运行期license过期的解决办法。
  18. Python遥感图像处理应用篇(二十二):Python+GDAL 批量等距离裁剪影像-续
  19. 2022年中科大分子生物学考试题、复习资料汇总(往年真题复习资料)
  20. VR全景婚礼记录最幸福的那一刻

热门文章

  1. 湖北:当好长江经济带高质量发展生力军
  2. 班迪录屏文件只有声音没有视频-班迪录屏无视频-解决方法
  3. 直流稳压电源制作及管理方法详解
  4. ROS noetic 版本 No link elements found in urdf file问题
  5. 巧用并查集求解环的个数以及连通块的数目
  6. 【PTA】jmu-ds-集合的并交差运算-一道神奇的题目
  7. git的基本使用命令
  8. PHP实现统计下游浏览量
  9. 李沐动手学深度学习V2-全卷积网络FCN和代码实现
  10. java 代码 显示版本_[代码全屏查看]-Java版本小黄鸡