python numpy矩阵详解(基于Numpy.convolve使用Python实现滑动平均滤波的思路详解)
python numpy矩阵详解
基于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() |
5.参考
1. https://stackoverflow.com/questions/13728392/moving-average-or-running-mean
总结
以上所述是小编给大家介绍的Python实现滑动平均滤波的思路详解(基于Numpy.convolve),希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!
原文链接:http://www.cnblogs.com/xiaosongshine/p/10874644.html
- python线程安全队列(Python 限制线程的最大数量的方法Semaphore)
- pythonlambda是什么函数(Python之lambda匿名函数及map和filter的用法)
- python撤回的微信消息怎么看(Python实现微信消息防撤回功能的实例代码)
- python time模块是什么(python中时间模块的基本使用教程)
- python中的冒号怎么看(python 列表中[ ]中冒号‘:’的作用)
- python 从入门到实践笔记(python基础梳理一推荐)
- python 取出时间段日志(python 实现提取某个索引中某个时间段的数据方法)
- python零基础实战项目(十个Python练手的实战项目,学会这些Python就基本没问题了推荐)
- python冒泡排序代码通俗理解(详解python算法之冒泡排序)
- python调用支付宝支付接口(python实现支付宝转账接口)
- python中字典的主要特点(Python里字典的基本用法包括嵌套字典)
- 抖音上很火的表白程序链接(我喜欢你 抖音表白程序python版)
- python 文本分析 摘要(用Python逐行分析文件方法)
- kmp算法怎么用c描述(详解小白之KMP算法及python实现)
- python中random库的用法(Python minidom模块用法示例DOM写入和解析XML)
- 详解Python locals()的陷阱(详解Python locals的陷阱)
- 我们现在吃的苹果是哪里来的 原来现代苹果引入中国仅有一百多年(我们现在吃的苹果是哪里来的)
- 买绿宝不能只挑黄绿色 菜农教你3招挑,个个皮薄肉脆,香甜爆汁(买绿宝不能只挑黄绿色)
- 大果肉搭配薄瓜皮, 绿宝 脆甜爽口,不愧是甜瓜中的 佼佼者(大果肉搭配薄瓜皮)
- 河南尉氏县因地制宜发展果蔬种植 水坡镇绿宝甜瓜变 金瓜(河南尉氏县因地制宜发展果蔬种植)
- 谢广坤,你这么欺负谢腾飞,良心不会痛吗(你这么欺负谢腾飞)
- 乡村爱情15 宋晓峰怀疑自己孩子,腾飞与姜奶奶亲子鉴定出结果(宋晓峰怀疑自己孩子)
热门推荐
- js操作iframe
- 怎么样能写出兼容多个浏览器的css(主流浏览器css兼容问题汇总)
- linux系统用ftp传输文件(Linux与Windows XP之间使用FTP互传文件)
- dedecms添加板块(织梦DedeCMS后台文件列表按文件名排序的方法简介)
- react native web白屏(关于React Native 无法链接模拟器的问题)
- 数据化网络流量管理(适合云主机用户使用的流量监控软件)
- 10款免费好用的云服务器/VPS主机控制面板推荐(10款免费好用的云服务器/VPS主机控制面板推荐)
- laravel常用的辅助函数介绍(Laravel向公共模板赋值方法总结)
- docker镜像配置的挂载路径(解决docker挂载的目录无法读写问题)
- CSS中background-attachment
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9