python - 移动平均线或移动平均线

是否有用于 Python 的 SciPy 函数或 NumPy 函数或模块来计算给定特定窗口的一维数组的运行平均值?

最佳答案

更新:已经提出了更有效的解决方案,uniform_filter1d from scipy可能是“标准”第 3 方库中最好的,而且还有一些更新的或专门的库。


您可以使用 np.convolve为此:

np.convolve(x, np.ones(N)/N, mode='valid')

说明

运行平均值是 convolution 的数学运算的一个例子.对于运行平均值,您沿着输入滑动一个窗口并计算窗口内容的平均值。对于离散的一维信号,卷积是一样的,除了计算任意线性组合而不是平均值,即将每个元素乘以相应的系数并将结果相加。这些系数,一个对应于窗口中每个位置的系数,有时称为卷积内核。 N个值的算术平均值为(x_1 + x_2 + ... + x_N)/N,因此对应的内核为(1/N, 1/N, ..., 1/N),这正是我们使用 np.ones(N)/N 得到的。

边缘

np.convolvemode 参数指定如何处理边缘。我在这里选择了 valid 模式,因为我认为这是大多数人期望运行均值工作的方式,但您可能有其他优先事项。这是一个说明模式之间差异的图表:

import numpy as np
import matplotlib.pyplot as plt
modes = ['full', 'same', 'valid']
for m in modes:
    plt.plot(np.convolve(np.ones(200), np.ones(50)/50, mode=m));
plt.axis([-10, 251, -.1, 1.1]);
plt.legend(modes, loc='lower center');
plt.show()

https://stackoverflow.com/questions/13728392/

相关文章:

python - 创建用 NaN 填充的 numpy 矩阵

linux - 在linux中用制表符替换空格

python - 在 Alpine Linux 上安装 Pillow 时没有这样的文件或目录 "li

python - Pelican 3.3 pelican-quickstart 错误 "ValueE

python - 如何获取项目在列表中的位置?

linux - 工控机性能: Named Pipe vs Socket

windows - 使用什么字符将项目放在字母列表的末尾?

python - 如何删除 Python 中的前导空格?

linux - 如果指向的文件被移动或删除,Linux 上打开的文件句柄会发生什么

python - 转置一维 NumPy 数组