迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 > Python >

Python 中 NumPy 数组的滑动平均值

作者:迹忆客 最近更新:2023/12/21 浏览次数:

滑动平均值通常用于通过计算特定时间间隔的数据平均值来研究时间序列数据。它用于消除一些短期波动并研究数据趋势。在研究股价趋势时,简单滑动平均线被大量使用。

加权滑动平均线比旧数据更着重于最新数据。

下图将更好地了解滑动平均线。

简单滑动平均线

在本教程中,我们将讨论如何在 Python 中为 numpy 数组实现滑动平均。


使用 numpy.convolve 方法来计算 NumPy 数组的滑动平均值

convolve() 函数用于信号处理,可以返回两个数组的线性卷积。每个步骤要做的是取一个数组与当前窗口之间的内积并取它们的总和。

以下代码在用户定义的函数中实现了此函数。

import numpy as np


def moving_average(x, w):
    return np.convolve(x, np.ones(w), "valid") / w


data = np.array([10, 5, 8, 9, 15, 22, 26, 11, 15, 16, 18, 7])

print(moving_average(data, 4))

输出:

[ 8.    9.25 13.5  18.   18.5  18.5  17.   15.   14.  ]

使用 scipy.convolve 方法来计算 NumPy 数组的滑动平均值

我们也可以以同样的方式使用 scipy.convolve() 函数。假设它快一点。使用 numpy 模块计算滑动平均值的另一种方法是使用 cumsum() 函数。它计算数组的累加和。这是一种非常简单的非加权方法,用于计算滑动平均线。

以下代码使用此函数返回滑动平均线。

def moving_average(a, n):
    ret = np.cumsum(a, dtype=float)
    ret[n:] = ret[n:] - ret[:-n]
    return ret[n - 1 :] / n


data = np.array([10, 5, 8, 9, 15, 22, 26, 11, 15, 16, 18, 7])

print(moving_average(data, 4))

输出:

[ 8.    9.25 13.5  18.   18.5  18.5  17.   15.   14.  ]

使用 bottleneck 模块计算滑动平均值

bottleneck 模块是快速的 numpy 方法的编译。该模块具有 move_mean() 函数,该函数可以返回某些数据的滑动平均值。

例如,

import bottleneck as bn
import numpy as np


def rollavg_bottlneck(a, n):
    return bn.move_mean(a, window=n, min_count=None)


data = np.array([10, 5, 8, 9, 15, 22, 26, 11, 15, 16, 18, 7])

print(rollavg_bottlneck(data, 4))

输出:

[  nan   nan   nan  8.    9.25 13.5  18.   18.5  18.5  17.   15.   14.  ]

由于时间窗口间隔为 4,因此在开始处存在三个 nan 值,因为无法为它们计算滑动平均值。


使用 pandas 模块计算滑动平均值

时间序列数据主要与 pandas DataFrame 相关联。因此,该库非常适合对此类数据执行不同的计算。

我们可以使用 rolling()mean() 函数来计算时间序列数据的滑动平均值,如下所示。

import pandas as pd
import numpy as np

data = np.array([10, 5, 8, 9, 15, 22, 26, 11, 15, 16, 18, 7])

d = pd.Series(data)

print(d.rolling(4).mean())

输出:

0       NaN
1       NaN
2       NaN
3      8.00
4      9.25
5     13.50
6     18.00
7     18.50
8     18.50
9     17.00
10    15.00
11    14.00
dtype: float64

我们首先将 numpy 数组转换为时间序列对象,然后使用 rolling() 函数在滚动窗口上执行计算,并使用 mean() 函数计算滑动平均值。

这也是因为时间窗口间隔为 4,所以在开始时存在三个 nan 值,因为无法为它们计算滑动平均值。

上一篇:在 Python 中计算马氏距离

下一篇:没有了

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

在 Python 中计算马氏距离

发布时间:2023/12/24 浏览次数:125 分类:Python

有两个主要方法可用于在 Python 中查找两个 NumPy 数组之间的马氏距离,scipy 库中的 cdist() 函数和 numpy 包中的 numpy.einsum() 函数。

在 Python 中实现 ReLU 函数

发布时间:2023/12/24 浏览次数:62 分类:Python

本教程讨论 Relu 函数以及如何在 Python 中实现它。Relu 函数是机器学习的基础,在使用深度学习时必不可少。

杀死一个 Python 进程

发布时间:2023/12/24 浏览次数:103 分类:Python

本文讨论了杀死 Python 进程的三种方法。在使用 Python 编程时,有时我们的程序会陷入无限循环。

在 Python 中获取文件扩展名

发布时间:2023/12/24 浏览次数:79 分类:Python

它演示了如何在 Python 中获取文件扩展名。本教程将介绍如何在 Python 中从文件名中获取文件扩展名。

在 Python 中读取文件的第一行

发布时间:2023/12/24 浏览次数:156 分类:Python

本教程演示了如何在 Python 中读取文本文件的第一行。在 Python 中,我们有内置的函数可以处理不同的文件操作。

在 Python 中读取二进制文件

发布时间:2023/12/24 浏览次数:175 分类:Python

本教程演示了如何在 Python 中读取二进制文件。程序或内部处理器对二进制文件进行解释。它包含字节作为内容。

用 Python 向文件写入字节

发布时间:2023/12/24 浏览次数:69 分类:Python

本教程演示了如何在 Python 中向二进制文件写入字节。本教程中,我们将介绍在 Python 中如何向二进制文件写入字节。

Python 从路径获取不带扩展名的文件名

发布时间:2023/12/24 浏览次数:55 分类:Python

本教程演示了如何在 Python 中从文件路径中获取不带扩展名的文件名。本教程将演示在 Python 中从文件路径中获取不带扩展名的文件名的各种方法。

在 Python 中创建一个不存在的文件

发布时间:2023/12/24 浏览次数:64 分类:Python

本教程演示了如何在 Python 中创建一个不存在的文件。本教程将解释如何在 Python 中创建一个不存在的文件的各种方法。

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便