小编典典

numpy.convolve的加权移动平均值

python

我正在写一个使用numpy中的卷积函数的移动平均函数,它应该等效于(加权移动平均)。当我的权重全部相等时(如简单的算术平均值),它可以正常工作:

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使用convolve,因为它可以使代码更整洁(相同的代码,不同的权重),否则我认为我必须遍历所有数据并进行切片。

有关此行为的任何想法吗?


阅读 212

收藏
2020-12-20

共1个答案

小编典典

您想要的是np.correlate卷积运算中的第二个参数基本上被反转,因此您的预期结果将是np.convolve(data, w[::-1], 'valid')

2020-12-20