Python 中 NumPy 数组的滑动平均值
滑动平均值通常用于通过计算特定时间间隔的数据平均值来研究时间序列数据。它用于消除一些短期波动并研究数据趋势。在研究股价趋势时,简单滑动平均线被大量使用。
加权滑动平均线比旧数据更着重于最新数据。
下图将更好地了解滑动平均线。
在本教程中,我们将讨论如何在 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 中计算马氏距离
发布时间: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 中创建一个不存在的文件的各种方法。