基于Numpy.convolve使用Python实现滑动平均滤波的思路详解


Posted in Python onMay 16, 2019

基于Numpy.convolve使用Python实现滑动平均滤波的思路详解基于Numpy.convolve使用Python实现滑动平均滤波的思路详解

1.滑动平均概念

滑动平均滤波法(又称递推平均滤波法),时把连续取N个采样值看成一个队列 ,队列的长度固定为N ,每次采样到一个新数据放入队尾,并扔掉原来队首的一次数据.(先进先出原则)  把队列中的N个数据进行算术平均运算,就可获得新的滤波结果。N值的选取:流量,N=12;压力:N=4;液面,N=4~12;温度,N=1~4

优点:  对周期性干扰有良好的抑制作用,平滑度高  适用于高频振荡的系统 

缺点:  灵敏度低  对偶然出现的脉冲性干扰的抑制作用较差  不易消除由于脉冲干扰所引起的采样值偏差  不适用于脉冲干扰比较严重的场合  比较浪费RAM 

2.解决思路

可以发现滑动平均滤波法计算很类似与一维卷积的工作原理,滑动平均的N就对应一维卷积核大小(长度)。

步长会有些区别,滑动平均滤波法滑动步长为1,而一维卷积步长可以自定义。还有区别就是一维卷积的核参数是需要更新迭代的,而滑动平均滤波法核参数都是一。

我们应该怎么利用这个相似性呢?其实也很简单,只需要把一维卷积核大小(长度)和N相等,步长设置为1,核参数都初始为1就可以了。由于一维卷积具备速度快,然后我们就可以使用一维卷积来实现这个功能了,快速高效。

使用深度学习框架实现这个功能是否有些大材小用了?是有些大材小用了,因为这里使用卷积的核参数不用更新,其实没必要使用复杂的深度学习框架,如果Numpy中可以实现这些功能就更简单方便了。

说干就干,经过查找发现Numpy.convolve可以实现我们想要的功能。

3.Numpy.convolve介绍

numpy.convolve(a, v, mode=‘full')

参数:

a:(N,)输入的一维数组

v:(M,)输入的第二个一维数组

mode:{‘full', ‘valid', ‘same'}参数可选

‘full' 默认值,返回每一个卷积值,长度是N+M-1,在卷积的边缘处,信号不重叠,存在边际效应。

‘same' 返回的数组长度为max(M, N),边际效应依旧存在。

‘valid'  返回的数组长度为max(M,N)-min(M,N)+1,此时返回的是完全重叠的点。边缘的点无效。

和一维卷积参数类似,a就是被卷积数据,v是卷积核大小。

4.算法实现

def np_move_avg(a,n,mode="same"):
  return(np.convolve(a, np.ones((n,))/n, mode=mode))

原理说明

运行平均值是卷积数学运算的一个例子。对于运行平均值,沿着输入滑动窗口并计算窗口内容的平均值。对于离散的1D信号,卷积是相同的,除了代替计算任意线性组合的平均值,即将每个元素乘以相应的系数并将结果相加。那些系数,一个用于窗口中的每个位置,有时称为卷积核。现在,N值的算术平均值是(x_1 + x_2 + ... + x_N) / N,所以相应的内核是(1/N, 1/N, ..., 1/N),这正是我们通过使用得到的np.ones((N,))/N。

边缘处理

该mode的参数np.convolve指定如何处理边缘。在这里选择了same模式,这样可以保证输出长度一种,但你可能还有其他优先事项。这是一个说明模式之间差异的图:

import numpy as np
import matplotlib.pyplot as plt
def np_move_avg(a,n,mode="same"):
  return(np.convolve(a, np.ones((n,))/n, mode=mode))
modes = ['full', 'same', 'valid']
for m in modes:
  plt.plot(np_move_avg(np.ones((200,)), 50, mode=m));
plt.axis([-10, 251, -.1, 1.1]);
plt.legend(modes, loc='lower center');
plt.show() ​

基于Numpy.convolve使用Python实现滑动平均滤波的思路详解基于Numpy.convolve使用Python实现滑动平均滤波的思路详解

5.参考

1. https://stackoverflow.com/questions/13728392/moving-average-or-running-mean

总结

以上所述是小编给大家介绍的Python实现滑动平均滤波的思路详解(基于Numpy.convolve),希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!

Python 相关文章推荐
Python的Flask框架中使用Flask-SQLAlchemy管理数据库的教程
Jun 14 Python
python利用拉链法实现字典方法示例
Mar 25 Python
python logging日志模块的详解
Oct 29 Python
详解Django之auth模块(用户认证)
Apr 17 Python
Python Numpy计算各类距离的方法
Jul 05 Python
Django在admin后台集成TinyMCE富文本编辑器的例子
Aug 09 Python
python函数修饰符@的使用方法解析
Sep 02 Python
PyTorch笔记之scatter()函数的使用
Feb 12 Python
PyInstaller将Python文件打包为exe后如何反编译(破解源码)以及防止反编译
Apr 15 Python
pytorch读取图像数据转成opencv格式实例
Jun 02 Python
完美解决python针对hdfs上传和下载的问题
Jun 05 Python
python异常中else的实例用法
Jun 15 Python
Python实现Linux监控的方法
May 16 #Python
计算机二级python学习教程(3) python语言基本数据类型
May 16 #Python
Python实现爬取亚马逊数据并打印出Excel文件操作示例
May 16 #Python
Python实现的文轩网爬虫完整示例
May 16 #Python
计算机二级python学习教程(2) python语言基本语法元素
May 16 #Python
计算机二级python学习教程(1) 教大家如何学习python
May 16 #Python
详解Python传入参数的几种方法
May 16 #Python
You might like
深入php函数file_get_contents超时处理的方法详解
2013/06/03 PHP
php 下载保存文件保存到本地的两种实现方法
2013/08/12 PHP
CodeIgniter辅助之第三方类库third_party用法分析
2016/01/20 PHP
php in_array() 检查数组中是否存在某个值详解
2016/11/23 PHP
php 广告点击统计代码(php+mysql)
2018/02/21 PHP
CI框架简单分页类用法示例
2020/06/06 PHP
如何重写Laravel异常处理类详解
2020/12/20 PHP
一些主流JS框架中DOMReady事件的实现小结
2011/02/12 Javascript
Eval and new funciton not the same thing
2012/12/27 Javascript
JS幻灯片可循环播放可平滑旋转带滚动导航(自写)
2013/08/05 Javascript
JS实现点击链接取消跳转效果的方法
2014/01/24 Javascript
JavaScript实现在数组中查找不同顺序排列的字符串
2014/09/26 Javascript
微信小程序 UI布局常用技巧整理总结
2016/12/05 Javascript
JS校验与最终登陆界面功能完整示例
2020/01/13 Javascript
Vue.js的模板语法详解
2020/02/16 Javascript
ESLint 是如何检查 .vue 文件的
2020/11/30 Vue.js
跟老齐学Python之重回函数
2014/10/10 Python
python好玩的项目—色情图片识别代码分享
2017/11/07 Python
Python使用matplotlib实现绘制自定义图形功能示例
2018/01/18 Python
python线程池threadpool使用篇
2018/04/27 Python
使用Python的Dataframe取两列时间值相差一年的所有行方法
2018/07/10 Python
Python Numpy数组扩展repeat和tile使用实例解析
2019/12/09 Python
英国最受欢迎的在线隐形眼镜商店:VisionDirect.co.uk
2018/12/06 全球购物
英国和世界各地预订便宜的酒店:LateRooms.com
2019/05/05 全球购物
一些高难度的SQL面试题
2016/11/29 面试题
shell程序中如何注释
2012/02/17 面试题
汽车专业人才自我鉴定范文
2013/12/29 职场文书
大学生个人求职信
2014/06/02 职场文书
助理政工师申报材料
2014/06/03 职场文书
关于有小孩的离婚协议书
2014/10/26 职场文书
感谢信怎么写
2015/01/21 职场文书
2016年社区六一儿童节活动总结
2016/04/06 职场文书
numpy数据类型dtype转换实现
2021/04/24 Python
详解 TypeScript 枚举类型
2021/11/02 Javascript
Nginx性能优化之Gzip压缩设置详解(最大程度提高页面打开速度)
2022/02/12 Servers
Android存储中最基本的文件存储方式
2022/04/30 Java/Android