一文带你深入了解Python中的二次移动平均法

目录
  • 二次移动平均法逻辑
  • Python代码实现
  • 第二种实现二次移动平均法的方式
  • 第三种卷积实现二次移动平均法
  • 二次移动平均法的应用场景

二次移动平均法逻辑

二次移动平均法是一种重要的数学工具,用于处理时间序列数据,它的主要目的是通过平滑序列中的噪音数据来更好地捕捉趋势。

具体实现:

  • 计算第一个二次移动平均数,这通常是简单移动平均数(SMA)。
  • 使用以下公式计算每个时间步的二次移动平均数:

EMAt​=α×yt​+(1−α)×EMAt−1​

其中EMAt表示时间步t的二次移动平均数,yt表示时间步t的数据点,α表示权重系数,它一般设置为2/(n+1),其中n表示窗口长度。

Python代码实现

下面是一个用 python 实现的二次移动平均法的代码示例:

def ema(data, window):
    alpha = 2 / (window + 1)
    ema = [data[0]]
    for i in range(1, len(data)):
        ema.append(alpha * data[i] + (1 - alpha) * ema[-1])
    return ema

data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
window = 5
ema_data = ema(data, window)
print(ema_data)

运行代码,得到如下输出。

第二种实现二次移动平均法的方式

另一种写法是直接使用 NumPy 的函数 numpy.convolve() 实现二次移动平均法。具体如下:

import numpy as np

data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
window = 5

def double_moving_average(data, window=2):
    return np.convolve(data, np.ones(window) / window, 'valid')

ema_data = double_moving_average(data, window)
print(ema_data)

这里的 data 变量表示输入的数据, window 变量表示窗口大小,这个代码实现了二次移动平均法的功能,可以得到移动平均值数组。

第三种卷积实现二次移动平均法

第三种方法是使用卷积,在 Python 中可以使用 Numpy 实现:

import numpy as np

data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
window = 5

def moving_average_2(data, window=3):
    cumsum_vec = np.cumsum(np.insert(data, 0, 0))
    ma = (cumsum_vec[window:] - cumsum_vec[:-window]) / window
    return np.concatenate((np.zeros(window - 1), ma))

ema_data = moving_average_2(data, window)
print(ema_data)

这种方法将二次移动平均法转化为卷积的形式,使用 cumsum() 函数计算前缀和,然后通过切片的方式计算窗口内的平均值。

二次移动平均法的应用场景

数据平滑:可以通过二次移动平均法对时间序列数据进行平滑处理,去除其中的噪音和瞬时干扰。

趋势分析:可以通过对数据进行二次移动平均法处理,得到数据的趋势信息,用于趋势分析和预测。

市场分析:在股市分析中,二次移动平均法常被用于分析股票价格的趋势,判断买卖信号。

去除季节性:二次移动平均法可以用于去除季节性对数据的影响。

到此这篇关于一文带你深入了解Python中的二次移动平均法的文章就介绍到这了,更多相关Python二次移动平均法内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 用python求一个数组的和与平均值的实现方法

    如下所示: # coding = GBK a =[1,2,3,4,5] sum=0 b = len(a) print("这个数组的长度为:",b) for i in a: sum =sum +i print("这个数组之和为:",sum) print("这个数组平均数为",sum/b) 以上这篇用python求一个数组的和与平均值的实现方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们.

  • python求加权平均值的实例(附纯python写法)

    首先是数据源: #需要求加权平均值的数据列表 elements = [] #对应的权值列表 weights = [] 使用numpy直接求: import numpy as np np.average(elements, weights=weights) 附纯python写法: # 不使用numpy写法1 round(sum([elements[i]*weights[i] for i in range(n)])/sum(weights), 1) # 不使用numpy写法2 round(sum([

  • Python简单计算数组元素平均值的方法示例

    本文实例讲述了Python简单计算数组元素平均值的方法.分享给大家供大家参考,具体如下: Python 环境:Python 2.7.12 x64 IDE :     Wing IDE Professional  5.1.12-1 题目:  求数组元素的平均值 实现代码: # coding:utf-8 #求数组元素的平均值 a=[1,4,8,10,12] b=len(a) sum=0 print "我们测试结果:" print "数组长度为:",b for i in

  • python计算一个序列的平均值的方法

    本文实例讲述了python计算一个序列的平均值的方法.分享给大家供大家参考.具体如下: def average(seq, total=0.0): num = 0 for item in seq: total += item num += 1 return total / num 如果序列是数组或者元祖可以简单使用下面的代码 def average(seq): return float(sum(seq)) / len(seq) 希望本文所述对大家的Python程序设计有所帮助.

  • 一文带你深入了解Python中的二次移动平均法

    目录 二次移动平均法逻辑 Python代码实现 第二种实现二次移动平均法的方式 第三种卷积实现二次移动平均法 二次移动平均法的应用场景 二次移动平均法逻辑 二次移动平均法是一种重要的数学工具,用于处理时间序列数据,它的主要目的是通过平滑序列中的噪音数据来更好地捕捉趋势. 具体实现: 计算第一个二次移动平均数,这通常是简单移动平均数(SMA). 使用以下公式计算每个时间步的二次移动平均数: EMAt​=α×yt​+(1−α)×EMAt−1​ 其中EMAt表示时间步t的二次移动平均数,yt表示时间步

  • 一文带你搞懂Python中的文件操作

    目录 一.文件的编码 二.文件的读取 2.1 open()打开函数 2.2 mode常用的三种基础访问模式 2.3 读操作相关方法 三.文件的写入 写操作快速入门 四.文件的追加 追加写入操作快速入门 五.文件操作综合案例 一.文件的编码 计算机中有许多可用编码: UTF-8 GBK Big5 等 UTF-8是目前全球通用的编码格式 除非有特殊需求,否则,一律以UTF-8格式进行文件编码即可. 二.文件的读取 2.1 open()打开函数 注意:此时的f是open函数的文件对象,对象是Pytho

  • 一文带你搞懂Numpy中的深拷贝和浅拷贝

    目录 1. 引言 2. 浅拷贝 2.1 问题引入 2.2 问题剖析 3. 深拷贝 3.1 举个栗子 3.2 探究原因 4. 技巧总结 4.1 判断是否指向同一内存 4.2 其他数据类型 5. 总结 1. 引言 深拷贝和浅拷贝是Python中重要的概念,本文重点介绍在NumPy中深拷贝和浅拷贝相关操作的定义和背后的原理. 闲话少说,我们直接开始吧! 2. 浅拷贝 2.1 问题引入 我们来举个栗子,如下所示我们有两个数组a和b,样例代码如下: import numpy as np a = np.ar

  • 一文带你搞懂JS中六种For循环的使用

    目录 一.各个 for 介绍 1.for 2.for ... in 3.for ... of 4.for await...of 5.forEach 6.map 二.多个 for 之间区别 1.使用场景差异 2.功能差异 3.性能差异 三.for 的使用 for 循环在平时开发中使用频率最高的,前后端数据交互时,常见的数据类型就是数组和对象,处理对象和数组时经常使用到 for 遍历,因此下班前花费几分钟彻底搞懂这 5 种 for 循环.它们分别为: for for ... in for ... o

  • 一文带你了解Go语言中的单元测试

    目录 基本概念 示例一:取整函数基本测试 示例二:Fail()函数 示例三:FailNow函数 实例四:Log和Fetal函数 基本概念 上一节提到,代码完成的标准之一还包含了单元测试,这部分也是很多开发流程中不规范的地方.写过单元测试的开发人员应该理解,单元测试最核心的价值是为了证明:为什么我写的代码是正确的?也就是从逻辑角度帮你检查你的代码.但是另外一方面,如果从单元测试覆盖率角度来看,单元测试也是非常耗时的,几乎是三倍于你代码的开发时间,所以在很多迭代速度非常快的项目中,单元测试就几乎没人

  • 一文带你入门Go语言中定时任务库Cron的使用

    目录 前言 快速开始 安装 导入 Demo Cron表达式格式 标准格式 预定义时间表 常用的方法介绍 new() AddJob() AddFunc() Start() 相关推荐 Go第三方库之cronexpr——解析 crontab 表达式 总结 前言 在平时的开发需求中,我们经常会有一些重复执行的操作需要触发执行,和系统约个时间,在几点几分几秒或者每隔几分钟跑一个任务,说白了就是定时任务,,想必大家第一反应都是linux的Crontab.其实定时任务不止使用系统自带的Crontab,在Go语

  • 一文带你真正理解Java中的内部类

    目录 概述 内部类介绍和分类 常规内部类 局部内部类 匿名内部类 静态内部类 静态内部类和普通内部类的区别 内部类的作用 概述 不知道大家在平时的开发过程中或者源码里是否留意过内部类,那有思考过为什么要有内部类,内部类都有哪几种形式,静态内部类和普通内部类有什么区别呢?本篇文章主要带领大家理解下这块内容. 内部类介绍和分类 顾名思义,内部类是指一个类在另外一个类的内部,是定义在另一个类中的类.根据类的位置和属性不同,可以分为下面几种. 常规内部类 @Data public class Tree

  • 一文带你搞懂Java中的泛型和通配符

    目录 概述 泛型介绍和使用 泛型类 泛型方法 类型变量的限定 通配符使用 无边界通配符 通配符上界 通配符下界 概述 泛型机制在项目中一直都在使用,比如在集合中ArrayList<String, String>, Map<String,String>等,不仅如此,很多源码中都用到了泛型机制,所以深入学习了解泛型相关机制对于源码阅读以及自己代码编写有很大的帮助.但是里面很多的机制和特性一直没有明白,特别是通配符这块,对于通配符上界.下界每次用每次百度,经常忘记,这次我就做一个总结,加

  • 一文带你了解Go语言中的类型断言和类型转换

    目录 类型断言 类型判断 为什么需要断言 类型转换 什么时候使用类型转换 类型为什么称为转换 类型结论 在Go中,类型断言和类型转换是一个令人困惑的事情,他们似乎都在做同样的事情. 下面是一个类型断言的例子: var greeting interface{} = "hello world" greetingStr := greeting.(string) 接着看一个类型转换的例子: greeting := []byte("hello world") greeting

  • 一文带你搞懂Java中Get和Post的使用

    目录 1 Get请求数据 1.1 Controller 1.2 Service 1.3 Application 1.4 Postman 2 Post接收数据 2.1 Controller 2.2 Service 2.3 Application 2.4 Postman 3 Post发送数据 3.1 Controller 3.2 Service 3.3 ResponseResult 3.4 Config 3.5 Application 3.6 Postman 1 Get请求数据 项目地址:https

随机推荐