python - 带 numpy.convolve 的加权移动平均线

标签 python math numpy

我正在编写一个使用 numpy 中的卷积函数的移动平均函数,它应该等同于 ( weighted moving average)。当我的权重都相等时(如简单的算术平均值),它工作正常:

data = numpy.arange(1,11)
numdays = 5
w = [1.0/numdays]*numdays
numpy.convolve(data,w,'valid')

给予

array([ 3.,  4.,  5.,  6.,  7.,  8.])

但是,当我尝试使用加权平均值时

w = numpy.cumsum(numpy.ones(numdays,dtype=float),axis=0); w = w/numpy.sum(w)

而不是(对于相同的数据)3.667,4.667,5.667,6.667,... 我期望,我得到

array([ 2.33333333,  3.33333333,  4.33333333,  5.33333333,  6.33333333,
        7.33333333])

如果我删除“有效”标志,我什至看不到正确的值。我真的很想对 WMA 和 MA 使用卷积,因为它使代码更清晰(相同的代码,不同的权重),否则我认为我将不得不遍历所有数据并进行切片。

关于这种行为有什么想法吗?

最佳答案

你想要的是 np.correlate 在卷积中,第二个参数基本上是反转的,这样你的预期结果就是 np.convolve(data, w[::-1 ], '有效')

关于python - 带 numpy.convolve 的加权移动平均线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12816011/

相关文章:

python - 将 xarray 数据变量重新分配给 xarray 坐标

python - jaydebeapi 最新更新至 1.0.0 导致连接错误

python - python 中的自定义提示

PHP 计算立方根 x^(1/3) 不起作用

python - 向量化微分方程组的正向欧拉法

python - 希望使用 argparse 设置全局默认参数

performance - 亚线性时间内的第 n 个斐波那契数

algorithm - 找出不小于 N 的最小正则数

python - numpy 将 int 解析为位分组

python - numpy.polyfit vs numpy.polynomial.polynomial.polyfit