作者热门文章
- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
是否有用于 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.convolve
的mode
参数指定如何处理边缘。我在这里选择了 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()
关于python - 移动平均线或移动平均线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13728392/
我是一名优秀的程序员,十分优秀!