移動平均または移動平均 質問する

移動平均または移動平均 質問する

特定のウィンドウを指定して 1D 配列の実行平均を計算する Python 用の SciPy 関数、NumPy 関数、またはモジュールはありますか?

ベストアンサー1

注記:詳細効率的なソリューション含まれる可能性があるscipy.ndimage.uniform_filter1d(見るこの答え)、または新しいライブラリを使用して、タリブtalib.MA


使用np.convolve:

np.convolve(x, np.ones(N)/N, mode='valid')

説明

移動平均は、次のような数学的演算の例である。畳み込み移動平均の場合、入力に沿ってウィンドウをスライドさせ、ウィンドウの内容の平均を計算します。離散 1D 信号の場合、畳み込みは同じですが、平均の代わりに任意の線形結合を計算します。つまり、各要素に対応する係数を乗算し、結果を合計します。ウィンドウ内の各位置に 1 つずつあるこれらの係数は、畳み込みカーネルと呼ばれることもあります。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()

移動平均畳み込みモード

おすすめ記事