python实现线性插值的示例
作者:初学小白Lu 发布时间:2023-08-10 21:33:55
线性插值
插值:是根据已知的数据序列(可以理解为你坐标中一系列离散的点),找到其中的规律,然后根据找到的这个规律,来对其中尚未有数据记录的点进行数值估计。
线性插值:是针对一维数据的插值方法。它根据一维数据序列中需要插值的点的左右临近两个数据来进行数值估计。当然了它不是求这两个点数据大小的平均值(在中心点的时候就等于平均值)。而是根据到这两个点的距离来分配比重的。
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 plt
xp = [1, 2, 3]
fp = [3, 2, 0]
y = np.interp(2.5, xp, fp)
#1.0
y = 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 np
y = 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 interp1d
x = [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])
来源:https://blog.csdn.net/weixin_43956958/article/details/128150723
猜你喜欢
- 最近遇到这个函数,但查的中文博客里的解释貌似不是很到位,这里翻译一下stackoverflow上的回答并加上自己的理解。在pytorch中,
- 在上一篇文章中,我们介绍了如何使用源码对TensorBoard进行编译教程,没有定制需求的可以直接使用pip进行安装。TensorBoard
- Innodb:[fb]# ll -hs url_comment_*.ibd633M -rw-rw---- 1 mysql mysql 632
- 一.GO程序目录结构在GOPATH目录下的结构--bin(存放编译后生成的可执行文)|----hello.exe(可执行文件)--pkg(存
- var Fundamental = {count:1}; function Test(){} Test.prototype = Fundam
- python里面可以将路径里面的\替换成/避免转义。os.walk方法可以将目标路径下文件的root,dirs,files提取出来。后面对每
- 本文实例讲述了Python实现简单的多任务mysql转xml的方法。分享给大家供大家参考,具体如下:为了需求导出的格式尽量和navicat导
- InnoDB给MySQL提供了具有提交,回滚和崩溃恢复能力的事务安全(ACID兼容)存储引擎。InnoDB锁定在行级并且也在SELECT语句
- 前言诶?这有一个按钮(~ ̄▽ ̄)~,这是一个在html中实现的具有金属质感并且能镜面反射的按钮~效果电脑效果手机效果说明主要思路是使用 na
- --新增表字段 ALTER procedure [dbo].[sp_Web_TableFiled_Insert] ( @TableName
- 1.3 安装 ASP.net跟基督山一起检查你们的计算机哦CPU Pentium II 450以上,推荐733内存 256M 推荐 512M
- 最近在使用Tensorflow 实现DNN网络时,遇到一些问题。目前网上关于Tensorflow的资料还比较少,现把问题和解决方法写出来,仅
- 加载mnistimport numpydef loadMnist() -> (numpy.ndarray,numpy.ndarray,
- 本文研究的主要是Python多线程threading和multiprocessing模块的相关内容,具体介绍如下。线程是一个进程的实体,是由
- 正三角形九九乘法表#正三角形九九乘法表for i in range(1,10): for j in range(1
- eg:如在后台的标签列表中,实现上移、下移、置顶功能主要实现思路是节点操作,比如说:上移,直接把点击项移动到前一个节点,以此类推,当然实际代
- 无意中看到一位学员的屏保,感觉挺有意思的,就把它实现了下来效果如下:<!DOCTYPE html PUBLIC "-//W3
- 1.CNN概述CNN的整体思想,就是对图片进行下采样,让一个函数只学一个图的一部分,这样便得到少但是更有效的特征,最后通过全连接神经网络对结
- 本文实例讲述了python获取文件版本信息、公司名和产品名的方法,分享给大家供大家参考。具体如下:该python代码可得到文件版本信息、公司
- 作用: 构建一些简单的SQL语句,结合在提交表单时使用,可以较方便<%@LANGUAGE="VBSCRIPT&