首页 > 其他分享 >使用滚动平均实现平滑数据

使用滚动平均实现平滑数据

时间:2023-12-28 12:33:08浏览次数:31  
标签:kernel 滚动 data 平滑 convolve mode np 平均 size

使用滚动平均实现平滑数据

时间序列数据通常包含一些噪声。而去除噪声最简单的方式就是使用一种简单的一致核来平滑数据。这种方式也叫滚动平均。
卷积是组合两个数组的一种数学运算,其中一个数组是我们的数据,通过一个核数组对其进行卷积。在卷积过程中,将核集中在一个数据点上。
然后将核中的每个数据点与每个相应的数据点相乘,将所有的结果加起来,形成新的数据点。
实例:

data = [2, 3, 1, 4, 1]
kernel = [1, 2, 3, 4]
np.convolve(data, kernel)
结果:# array([ 2,  7, 13, 23, 24, 18, 19,  4])

下面将计算过程一步一步细化:
首先,np.convolve会翻转kernel得到flipped kernel [4, 3, 2, 1]

[4, 3, 2, 1]  # The flipped kernel
          x
         [2, 3, 1, 4, 1]  # The data
          2= 2
         [2]
 
   [4, 3, 2, 1]
          x  x
         [2, 3, 1, 4, 1]
          4+ 3= 7
         [2, 7]
 
      [4, 3, 2, 1]
          x  x  x
         [2, 3, 1, 4, 1]
          6+ 6+ 1=13
         [2, 7, 13]
 
         [4, 3, 2, 1]
          x  x  x  x
         [2, 3, 1, 4, 1]
          8+ 9+ 2+ 4= 23
         [2, 7,13, 23]
             [4, 3, 2, 1]
              x  x  x  x
          [2, 3, 1, 4, 1]
             12+ 3+ 8+ 1 = 24
                [4, 3, 2]
                 x  x  x
          [2, 3, 1, 4, 1]
                 4+ 12+ 2 = 18
                   [4, 3]
                    x  x
          [2, 3, 1, 4, 1]
                    16+ 3 = 19
                       [4]
                        x
          [2, 3, 1, 4, 1]
                        4

方法np.convolve的一般语法是np.convolve(data, kernel, mode='valid'), 这里的mode决定了边界的取舍, 默认mode='full'

  • mode='valid': 将不匹配完全kernel的数据的边界全部去掉,在实例中也就是kernel的长度是4,那么数据也要取4,其余的数据不要。
  • mode='same': 新生成的数组与原数组的形状一致,也就是说,新生成的数组和原数组维度一致。
  • mode='full': 边界不省略,保留全部计算。

实例:

data = [2, 3, 1, 4, 1]
kernel = [1, 2, 3, 4]
np.convolve(data, kernel, mode='valid')
结果:# array([23, 24])

实例:

data = [2, 3, 1, 4, 1]
kernel = [1, 2, 3, 4]
np.convolve(data, kernel, mode='same')
结果:# array([ 7, 13, 23, 24, 18])

小tips : 最好对kernel进行归一化,原因在于如果不进行归一化,有可能导致原始信号的量纲变得很大,导致不可想象的错误。此外,kernel的大小也对卷积效果有影响。

实例:

kernel_size = 10
kernel = np.ones(kernel_size) / kernel_size
data_convolved_10 = np.convolve(data, kernel, mode='same')
 
kernel_size = 20
kernel = np.ones(kernel_size) / kernel_size
data_convolved_20 = np.convolve(data, kernel, mode='same')
 
plt.plot(data_convolved_20)
plt.plot(data_convolved_10)
plt.legend(("Kernel Size 10", "Kernel Size 20"))

结论:较大的核会导致较小的尖峰,波峰也会改变。具体来说,滚动均值是一个低通滤波器,这意味着它使低频信号单独存在,而使高频信号更小。数据的急剧增加具有很高的频率。如果我们使核更大,滤波器对高频信号的衰减会更大。
这就是滚动平均的工作原理。它消除了高频噪声。这也意味着我们必须小心,不要用滚动平均滤波器过多地扭曲信号。

标签:kernel,滚动,data,平滑,convolve,mode,np,平均,size
From: https://www.cnblogs.com/bonne-chance/p/17932453.html

相关文章

  • CSS实现滚动贴合效果
    一、滚动贴合介绍滚动贴合:鼠标滚动的时候,自动贴合到浏览器的底部或顶部设置CSS滚动贴合需要使用到两个属性:1、给滚动容器设置scroll-snap-type,值为滚动的方向和方式.container{/*display:flex;*//*第一个值为滚动贴合的方向,y表示纵向滚动贴合......
  • 不使用第三方插件自己写一个数字递增滚动组件
    开箱即用水贴专用哈哈哈封装NumberRoller.vue组件<template><div><span:style="fontColorSize">{{formattedValue||0}}</span></div></template><script>exportdefault{props:{rollNumber:{//......
  • 手写滑动同步滚动进度条jq插件
    因需要一种滑动显示内容,并且带可拖动的进度条,即下面这种效果 找了很多插件,总有地方不能满足需求。于是决定自己手写,下面为完整源码:swiper.js1$.swiperCalculator=function(wrap,drag){2this.wrap=wrap;3this.drag=drag;4this.dWidth=drag......
  • 好看的滚动文字渐入效果
    全部代码:const observers = [] // 用于存储所有观察者 -> 收集起来主要是为了当路由变化时效果之前的观察者。export default { // ... 省略 setup() {  const route = useRoute()  onMounted(() => {   initFirstScreen() // 初始化 -> 给首......
  • 输入若干个数,求最大、最小、平均值
    #define_CRT_SECURE_NO_WARNINGS1#include<stdio.h>intmain(){ intarr[10]; intmax=0; intmin=0; intsum=0; printf("请输入十个数\n"); for(inti=0;i<10;i++) { scanf("%d",&arr[i]); } for(inti=0;i&......
  • 关于uniapp设置头部固定,内容区域滚动,不同手机显示表现不一致的问题
    问题若固定了头部元素区域高度,比如固定的rpx,vh等,在其他手机中可能出现部分空白,导致界面不协调。我的解决方案是自动计算出头部区域元素的高度,让内容区域自动设置外边距方案使用了unaipp提供的 uni.createSelectorQuery() 方法来获取头部区域的高度。首先,通过 ref="header"......
  • 637. 二叉树的层平均值
    目录题目题解:BFS题目给定一个非空二叉树的根节点root,以数组的形式返回每一层节点的平均值。与实际答案相差10-5以内的答案可以被接受。题解:BFSclassSolution:defaverageOfLevels(self,root:Optional[TreeNode])->List[float]:q=[root]#用列表做......
  • 4. 分别给出 3 个学生的 4 门课程的成绩,求其中的最高成绩、各门课程的平 均成绩和总平
    #define_CRT_SECURE_NO_WARNINGS1#include<stdio.h>intmain(){ intmax1=0; intmax2=0; intmax3=0; intarr[3][4]={{59,66,78,98},{64,85,76,90},{9,95,95,96}};//定义一个三行四列的数组 printf("张三成绩:\n"); printf("语文\t数学\t英语\t道德......
  • R语言经济学:动态模型平均(DMA)、动态模型选择(DMS)预测原油价格时间序列
    原文链接:http://tecdat.cn/?p=22458 原文出处:拓端数据部落公众号 简介本文提供了一个经济案例。着重于原油市场的例子。简要地提供了在经济学中使用模型平均和贝叶斯方法的论据,使用了动态模型平均法(DMA),并与ARIMA、TVP等方法进行比较。希望对经济和金融领域的从业人员和研究......
  • 一个简单的QML滚动字幕实现
    一个简单的QML滚动字幕实现目录结构configparam.h#ifndefCONFIGPARAM_H#defineCONFIGPARAM_H#include<QObject>#include<QTypeInfo>classconfigParam:publicQObject{Q_OBJECTQ_PROPERTY(QStringbackGroundColorREADgetBackGroundColorNOTIFYba......