基于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语言中的按位运算符
Nov 26 Python
Android模拟器无法启动,报错:Cannot set up guest memory ‘android_arm’ Invalid argument的解决方法
Jul 01 Python
python计算auc指标实例
Jul 13 Python
python 禁止函数修改列表的实现方法
Aug 03 Python
python 读取目录下csv文件并绘制曲线v111的方法
Jul 06 Python
python函数的万能参数传参详解
Jul 26 Python
Python with标签使用方法解析
Jan 17 Python
解决Keras的自定义lambda层去reshape张量时model保存出错问题
Jul 01 Python
解决pyinstaller 打包exe文件太大,用pipenv 缩小exe的问题
Jul 13 Python
python爬虫搭配起Bilibili唧唧的流程分析
Dec 01 Python
python time.strptime格式化实例详解
Feb 03 Python
详解NumPy中的线性关系与数据修剪压缩
May 25 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
Linux下 php5 MySQL5 Apache2 phpMyAdmin ZendOptimizer安装与配置[图文]
2008/11/18 PHP
PHP中auto_prepend_file与auto_append_file用法实例分析
2014/09/22 PHP
php+lottery.js实现九宫格抽奖功能
2019/07/21 PHP
laravel 时间格式转时间戳的例子
2019/10/11 PHP
很全的显示阴历(农历)日期的js代码
2009/01/01 Javascript
jQuery Tab插件 用于在Tab中显示iframe,附源码和详细说明
2011/06/27 Javascript
jQuery实现类似淘宝购物车全选状态示例
2013/06/26 Javascript
浅析JavaScript中的同名标识符优先级
2013/12/06 Javascript
jquery使用ajax实现微信自动回复插件
2014/04/28 Javascript
JavaScript数组对象赋值用法实例
2015/08/04 Javascript
探讨AngularJs中ui.route的简单应用
2016/11/16 Javascript
jquery ajaxfileupload异步上传插件使用详解
2017/02/08 Javascript
three.js实现3D视野缩放效果
2017/11/16 Javascript
vue 自定义指令自动获取文本框焦点的方法
2018/08/25 Javascript
基于Angularjs-router动态改变Title值的问题
2018/08/30 Javascript
js实现金山打字通小游戏
2020/07/24 Javascript
通过高德地图API获得某条道路上的所有坐标用于描绘道路的方法
2020/08/24 Javascript
如何将Node.js中的回调转换为Promise
2020/11/10 Javascript
让Vue响应Map或Set的变化操作
2020/11/11 Javascript
pycharm 使用心得(二)设置字体大小
2014/06/05 Python
Python的Django框架中的URL配置与松耦合
2015/07/15 Python
利用Python如何生成随机密码
2016/04/20 Python
Python基于QRCode实现生成二维码的方法【下载,安装,调用等】
2017/07/11 Python
python获取时间及时间格式转换问题实例代码详解
2018/12/06 Python
Pyspark读取parquet数据过程解析
2020/03/27 Python
python函数map()和partial()的知识点总结
2020/05/26 Python
Python中bisect的用法及示例详解
2020/07/20 Python
女士时装鞋:Chinese Laundry
2018/08/29 全球购物
德国消费电子产品购物网站:Guter Kauf
2020/09/15 全球购物
会计专业推荐信
2013/10/29 职场文书
个人自我鉴定
2013/11/07 职场文书
心碎乌托邦的创业计划书范文
2013/12/26 职场文书
社区端午节活动方案
2014/01/28 职场文书
三八妇女节超市活动方案
2014/08/18 职场文书
爱国主义影片观后感
2015/06/18 职场文书
Python爬取用户观影数据并分析用户与电影之间的隐藏信息!
2021/06/29 Python