是否有用于 Python 的 SciPy 函数或 NumPy 函数或模块来计算给定特定窗口的一维数组的运行平均值?
原文由 Shejo284 发布,翻译遵循 CC BY-SA 4.0 许可协议
是否有用于 Python 的 SciPy 函数或 NumPy 函数或模块来计算给定特定窗口的一维数组的运行平均值?
原文由 Shejo284 发布,翻译遵循 CC BY-SA 4.0 许可协议
更新: 已经提出了更有效的解决方案, uniform_filter1d
来自 scipy
可能是“标准”第 3 方库中最好的,一些更新的或专门的库也可用。
您可以为此使用 np.convolve
:
np.convolve(x, np.ones(N)/N, mode='valid')
运行平均值是 卷积 数学运算的一个例子。对于运行平均值,您沿着输入滑动一个窗口并计算窗口内容的平均值。对于离散的一维信号,卷积是一样的,除了计算任意线性组合而不是平均值,即,将每个元素乘以相应的系数并将结果相加。这些系数(窗口中的每个位置一个)有时称为卷积 _核_。 N 个值的算术平均值为 (x_1 + x_2 + ... + x_N) / N
,因此对应的内核为 (1/N, 1/N, ..., 1/N)
,这正是我们使用 np.ones(N)/N
得到的结果
mode
np.convolve
指定了如何处理边缘。我在这里选择了 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()
原文由 lapis 发布,翻译遵循 CC BY-SA 4.0 许可协议
4 回答4.4k 阅读✓ 已解决
4 回答3.8k 阅读✓ 已解决
1 回答3k 阅读✓ 已解决
3 回答2.1k 阅读✓ 已解决
1 回答4.5k 阅读✓ 已解决
1 回答3.8k 阅读✓ 已解决
1 回答2.8k 阅读✓ 已解决
对于一个简短、快速的解决方案,它在一个循环中完成整个事情,没有依赖关系,下面的代码效果很好。