如何在Python中计算移动平均值?

news2024/11/21 1:23:29

在这篇文章中,我们将看到如何在Python中计算移动平均值。移动平均是指总观测值集合中固定大小子集的一系列平均值。它也被称为滚动平均。

考虑n个观测值的集合,k是用于确定任何时间t的平均值的窗口的大小。然后,移动平均列表通过最初取当前窗口中存在的前k个观测值的平均值并将其存储在列表中来计算。现在,根据要确定的移动平均值的条件来扩展窗口,并且再次计算窗口中存在的元素的平均值并将其存储在列表中。这个过程一直持续到窗口到达集合的末尾。

例如:给定一个包含五个整数的列表 arr=[1,2,3,7,9],我们需要计算窗口大小为3的列表的移动平均值。我们将首先计算前3个元素的平均值,并将其存储为第一个移动平均值。然后窗口将向右移动一个位置,并再次计算窗口中存在的元素的平均值并存储在列表中。类似地,该过程将重复,直到窗口到达数组的最后一个元素。以下是对上述方法的说明:

在这里插入图片描述

下面是实现:

# Program to calculate moving average 
arr = [1, 2, 3, 7, 9] 
window_size = 3

i = 0
# Initialize an empty list to store moving averages 
moving_averages = [] 

# Loop through the array to consider 
# every window of size 3 
while i < len(arr) - window_size + 1: 
	
	# Store elements from i to i+window_size 
	# in list to get the current window 
	window = arr[i : i + window_size] 

	# Calculate the average of current window 
	window_average = round(sum(window) / window_size, 2) 
	
	# Store the average of current 
	# window in moving average list 
	moving_averages.append(window_average) 
	
	# Shift window to right by one position 
	i += 1

print(moving_averages)

输出

[2.0, 4.0, 6.33]

简单移动平均

SMA(Simple Moving Average)的计算方法是取当前窗口中某个时间的k个(窗口大小)观测值的加权平均值。它用于分析趋势。

公式:
在这里插入图片描述
其中,

  • SMAj = 第j个窗口的简单移动平均值

  • k =窗口大小

  • ai =观测集的第i个元素

方法1:使用Numpy

Python的Numpy模块提供了一种简单的方法来计算观测数组的简单移动平均值。它提供了一个名为numpy.sum()的方法,该方法返回给定数组的元素之和。移动平均值可以通过找到窗口中存在的元素的总和并将其除以窗口大小来计算。

# Program to calculate moving average using numpy 

import numpy as np 

arr = [1, 2, 3, 7, 9] 
window_size = 3

i = 0
# Initialize an empty list to store moving averages 
moving_averages = [] 

# Loop through the array t o 
#consider every window of size 3 
while i < len(arr) - window_size + 1: 

	# Calculate the average of current window 
	window_average = round(np.sum(arr[ 
	i:i+window_size]) / window_size, 2) 
	
	# Store the average of current 
	# window in moving average list 
	moving_averages.append(window_average) 
	
	# Shift window to right by one position 
	i += 1

print(moving_averages)

输出

[2.0, 4.0, 6.33]

方法2:使用Pandas

Python的Pandas模块提供了一种简单的方法来计算一系列观测值的简单移动平均值。它提供了一个名为pandas.Series.rolling(window_size)的方法,该方法返回指定大小的滚动窗口。窗口的平均值可以通过在上面获得的窗口对象上使用pandas.Series.mean()函数来计算。pandas.Series.rolling(window_size)将返回一些空序列,因为它至少需要k个(窗口大小)元素才能滚动。

# Python program to calculate 
# simple moving averages using pandas 
import pandas as pd 

arr = [1, 2, 3, 7, 9] 
window_size = 3

# Convert array of integers to pandas series 
numbers_series = pd.Series(arr) 

# Get the window of series 
# of observations of specified window size 
windows = numbers_series.rolling(window_size) 

# Create a series of moving 
# averages of each window 
moving_averages = windows.mean() 

# Convert pandas series back to list 
moving_averages_list = moving_averages.tolist() 

# Remove null entries from the list 
final_list = moving_averages_list[window_size - 1:] 

print(final_list) 

输出

[2.0, 4.0, 6.33]

累积移动平均

CMA(Cumulative Moving Average)的计算方法是取计算时所有观测值的加权平均值。用于时间序列分析。

公式:
在这里插入图片描述
其中:

  • CMAt = 时间t的累积移动平均值
  • kt = 截至时间t的观测次数
  • ai = 观测集的第i个元素

方法1:使用Numpy

Python的Numpy模块提供了一种简单的方法来计算观测数组的累积移动平均值。它提供了一个名为numpy.cumsum()的方法,该方法返回给定数组的元素的累积和的数组。移动平均值可以通过将元素的累积和除以窗口大小来计算。

# Program to calculate cumulative moving average 
# using numpy 

import numpy as np 

arr = [1, 2, 3, 7, 9] 

i = 1
# Initialize an empty list to store cumulative moving 
# averages 
moving_averages = [] 

# Store cumulative sums of array in cum_sum array 
cum_sum = np.cumsum(arr); 

# Loop through the array elements 
while i <= len(arr): 

	# Calculate the cumulative average by dividing 
	# cumulative sum by number of elements till 
	# that position 
	window_average = round(cum_sum[i-1] / i, 2) 
	
	# Store the cumulative average of 
	# current window in moving average list 
	moving_averages.append(window_average) 
	
	# Shift window to right by one position 
	i += 1

print(moving_averages)

输出

[1.0, 1.5, 2.0, 3.25, 4.4]

方法2:使用Pandas

Python的Pandas模块提供了一种简单的方法来计算一系列观测值的累积移动平均值。它提供了一个名为pandas.Series.expanding()的方法,该方法返回一个窗口,该窗口覆盖了截至时间t的所有观察结果。窗口的平均值可以通过使用pandas.Series.mean()函数在上面获得的窗口对象上计算。

# Python program to calculate 
# cumulative moving averages using pandas 
import pandas as pd 

arr = [1, 2, 3, 7, 9] 
window_size = 3

# Convert array of integers to pandas series 
numbers_series = pd.Series(arr) 

# Get the window of series of 
# observations till the current time 
windows = numbers_series.expanding() 

# Create a series of moving averages of each window 
moving_averages = windows.mean() 

# Convert pandas series back to list 
moving_averages_list = moving_averages.tolist() 

print(moving_averages_list) 

输出

[1.0, 1.5, 2.0, 3.25, 4.4]

指数移动平均

EMA(Exponential Moving Average)是通过每次取观测值的加权平均值来计算的。观察值的权重随时间呈指数下降。它用于分析最近的变化。

公式:
在这里插入图片描述
其中:

  • EMAt = 时间t的指数移动平均
  • α = 观察权重随时间的降低程度
  • at = 在时间t的观察
# Program to calculate exponential 
# moving average using formula 

import numpy as np 

arr = [1, 2, 3, 7, 9] 
x=0.5 # smoothening factor 

i = 1
# Initialize an empty list to 
# store exponential moving averages 
moving_averages = [] 

# Insert first exponential average in the list 
moving_averages.append(arr[0]) 

# Loop through the array elements 
while i < len(arr): 

	# Calculate the exponential 
	# average by using the formula 
	window_average = round((x*arr[i])+
						(1-x)*moving_averages[-1], 2) 
	
	# Store the cumulative average 
	# of current window in moving average list 
	moving_averages.append(window_average) 
	
	# Shift window to right by one position 
	i += 1

print(moving_averages)

输出

[1, 1.5, 2.25, 4.62, 6.81]

方法1:使用Pandas

Python的Pandas模块提供了一种简单的方法来计算一系列观测值的指数移动平均值。它提供了一种称为pandas.Series.ewm.mean()的方法,用于计算给定观测值的指数移动平均值。

pandas.Series.ewm()接受一个称为平滑因子的参数,即观察值的权重随时间减少的程度。平滑因子的值始终介于0和1之间。

# Python program to 
# calculate exponential moving averages 
import pandas as pd 

arr = [1, 2, 3, 7, 9] 

# Convert array of integers to pandas series 
numbers_series = pd.Series(arr) 

# Get the moving averages of series 
# of observations till the current time 
moving_averages = round(numbers_series.ewm( 
alpha=0.5, adjust=False).mean(), 2) 

# Convert pandas series back to list 
moving_averages_list = moving_averages.tolist() 

print(moving_averages_list) 

输出

[1.0, 1.5, 2.25, 4.62, 6.81]

应用场景

  • 时间序列分析:它用于平滑短期变化并突出长期观察,如趋势和周期。
  • 金融分析:它用于股票市场的财务分析,如计算股票价格,回报和分析市场趋势。
  • 环境工程:它用于分析环境条件,考虑各种因素,如污染物的浓度等。
  • 计算机性能分析:它通过计算平均CPU利用率、平均进程队列长度等指标来分析计算机性能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2182737.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

文件名称重命名批量操作:大量文件里的符号一键删除重命名

文件名重命名是一个常见需求&#xff0c;特别是在处理大量文件时&#xff0c;为了提高文件管理效率&#xff0c;文件批量改名高手实现批量重命名。把每个文件名里的符号删除。一起去试试。 1运行软件&#xff1a;在电脑里登录上文件批量改名高手&#xff0c;在三大功能中选择“…

力扣 —— 跳跃游戏

题目一(中等) 给你一个非负整数数组 nums &#xff0c;你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个下标&#xff0c;如果可以&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 示例 1&…

机器学习西瓜书南瓜书——决策树模型

机器学习西瓜书&南瓜书——决策树模型 本文主要结合南瓜书对西瓜书决策树模型进行一个解读&#xff0c;帮助大家更好的理解西瓜书 ​ 决策树模型是机器学习领域最常见的模型之一&#xff0c;甚至有人说决策树模型上机器学习领域的水平上升了一个台阶。决策树的基本思想是…

家用高清投影仪怎么选?目前口碑最好的投影仪推荐

双十一马上要到了&#xff0c;而且今年还有投影仪的家电国补&#xff0c;所以大家入手投影仪的需求也越来越多&#xff0c;但是家用高清投影仪怎么选&#xff1f;什么投影仪最适合家用&#xff1f;家庭投影仪哪个牌子质量最好&#xff1f;今天就给大家做一个2024性价比高的家用…

本地访问autodl的jupyter notebook

建立环境并安装jupyter conda create --name medkg python3.10 source activate medkg pip install jupyter 安装完成后&#xff0c;输入jupyter notebook --generate-config 输入ipython,进入python In [2]: from jupyter_server.auth import passwd In [3]: passwd(algori…

Halcon基础系列1-基础算子

1 窗口介绍 打开Halcon 的主界面主要有图形窗口、算子窗口、变量窗口和程序窗口&#xff0c;可拖动调整位置&#xff0c;关闭后可在窗口下拉选项中找到。 2 显示操作 关闭-dev_close_window() 打开-dev_open_window (0, 0, 712, 512, black, WindowHandle) 显示-dev_display(…

【算法系列-数组】螺旋矩阵(模拟)

【算法系列-数组】螺旋矩阵(模拟) 文章目录 【算法系列-数组】螺旋矩阵(模拟)1. 螺旋矩阵II(LeetCode 59)1.1 思路分析&#x1f3af;1.2 解题过程&#x1f3ac;1.3 代码示例&#x1f330; 2. 螺旋矩阵(LeetCode 54)2.1 思路分析&#x1f3af;2.2 解题过程&#x1f3ac;2.3 代码…

2024/10/1 408大题专训之磁盘管理

2021&#xff1a; 2019&#xff1a; 2010&#xff1a;

网络通信——动态路由协议RIP

目录 一.动态路由协议分类 二.距离矢量路由协议 &#xff08;理解&#xff09; 三. 链路状态路由协议&#xff08;理解&#xff09; 四.RIP的工作原理 五.路由表的形成过程 六. RIP的度量值&#xff08;条数&#xff09;cost 七.RIP的版本&#xff08;v1和v2&#xff0…

基于SpringBoot+Vue的校园篮球联赛管理系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;…

<使用生成式AI对四种冒泡排序实现形式分析解释的探讨整理>

<使用生成式AI对四种冒泡排序实现形式分析解释的探讨整理> 文章目录 <使用生成式AI对四种冒泡排序实现形式分析解释的探讨整理>1.冒泡排序实现形式总结1.1关于冒泡排序实现形式1的来源&#xff1a;1.2对四种排序实现形式使用AI进行无引导分析&#xff1a;1.3AI&…

字节终面问Transformer,就很离谱...

Transformer 是目前 NLP 甚至是整个深度学习领域不能不提到的框架&#xff0c;同时大部分 LLM 也是使用其进行训练生成模型&#xff0c;所以 Transformer 几乎是目前每一个机器人开发者或者人工智能开发者不能越过的一个框架。 接下来本文将从顶层往下去一步步掀开 Transforme…

只写CURD后台管理的Java后端要如何提升自己

你是否工作3~5年后&#xff0c;发现日常只做了CURD的简单代码。 你是否每次面试就会头疼&#xff0c;自己写的代码&#xff0c;除了日常CURD简历上毫无亮点可写 抱怨过苦恼过也后悔过&#xff0c;但是站在现在的时间点回想以前&#xff0c;发现有很多事情我们是可以做的更好的。…

宁夏众智科技OA办公系统存在SQL注入漏洞

漏洞描述 宁夏众智科技OA办公系统存在SQL注入漏洞 漏洞复现 POC POST /Account/Login?ACTIndex&CLRHome HTTP/1.1 Host: Content-Length: 45 Cache-Control: max-age0 Origin: http://39.105.48.206 Content-Type: application/x-www-form-urlencoded Upgrade-Insecur…

【C语言指南】数据类型详解(上)——内置类型

&#x1f493; 博客主页&#xff1a;倔强的石头的CSDN主页 &#x1f4dd;Gitee主页&#xff1a;倔强的石头的gitee主页 ⏩ 文章专栏&#xff1a;《C语言指南》 期待您的关注 目录 引言 1. 整型&#xff08;Integer Types&#xff09; 2. 浮点型&#xff08;Floating-Point …

C++ 游戏开发

C游戏开发 C 是一种高效、灵活且功能强大的编程语言&#xff0c;因其性能和控制能力而在游戏开发中被广泛应用。许多著名的游戏引擎&#xff0c;如 Unreal Engine、CryEngine 和 Godot 等&#xff0c;都依赖于 C 进行核心开发。本文将详细介绍 C 在游戏开发中的应用&#xff0…

【机器学习】ID3、C4.5、CART 算法

目录 常见的决策树算法 1. ID3 2. C4.5 3. CART 决策树的优缺点 优点&#xff1a; 缺点&#xff1a; 决策树的优化 常见的决策树算法 1. ID3 ID3&#xff08;Iterative Dichotomiser 3&#xff09;算法使用信息增益作为特征选择的标准。它是一种贪心算法&#xff0c;信…

Ubuntu开机进入紧急模式处理

文章目录 Ubuntu开机进入紧急模式处理一、问题描述二、解决办法参考 Ubuntu开机进入紧急模式处理 一、问题描述 Ubuntu开机不能够正常启动&#xff0c;自动进入紧急模式&#xff08;You are in emergency mode&#xff09;。具体如下所示&#xff1a; 二、解决办法 按CtrlD进…

基于SpringBoot+Vue的智能宾馆预定系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;…

基于人工智能的实时健身训练分析系统:深蹲姿态识别与动作评估

关于深度实战社区 我们是一个深度学习领域的独立工作室。团队成员有&#xff1a;中科大硕士、纽约大学硕士、浙江大学硕士、华东理工博士等&#xff0c;曾在腾讯、百度、德勤等担任算法工程师/产品经理。全网20多万粉丝&#xff0c;拥有2篇国家级人工智能发明专利。 社区特色…