13

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])

'valid'フラグを削除すると、正しい値が表示されません。コードをよりクリーンにするため(同じコード、異なる重み)、WMAとMAに畳み込みを使用したいと思います。そうでない場合は、すべてのデータをループしてスライスを取得する必要があると思います。

この振る舞いについて何か考えはありますか?

4

1 に答える 1

19

必要なのはnp.correlate畳み込みで、2番目の引数は基本的に反転されるため、期待される結果は。になりますnp.convolve(data, w[::-1], 'valid')

于 2012-10-10T11:18:43.900 に答える