Pythonによるデータ処理 ~ 移動平均
データの移動平均プロットを実行するpythonコードを作ろうと思ったときに、例えば
for i in np.arange(N-3) ave[i]=(data[i]+data[i+1]+data[i+2])/3
のようにfor文を使おうと思ったが、以下のように畳み込み積分を利用すると非常に簡単になる。
畳み込み積分を用いてN点の移動平均を実行するには、値が1/NでN要素数の行列を作っておき、np.convolve
を用いて移動平均を実行する元のデータ行列と畳み込み計算を実行する。
for文で書こうとすると元のデータ列とデータ数を合わせるなど注意が必要だが、np.convolve
の場合はmode='same'
とするだけでよい。(mode='full'
だと最後の点まで畳み込みを実行するので、元のデータ数より多くなる)
以下5点の移動平均処理のコードと実行例を示す。移動平均のデータはnp.random.randn(100)
として100点の乱数をデータ行列y
に格納した。また行列b
は値が1/5で要素数5であり、これをy
と畳み込み積分して移動平均処理されたy2
を生成する。
import numpy as np import matplotlib.pyplot as plt y=np.random.randn(100) num=5 b=np.ones(num)/num y2=np.convolve(y,b,mode='same') plt.plot(y,'c',label='original') plt.plot(y2,'b',label='move ave') plt.legend()
シアンが元のデータで青が5点移動平均したプロットで滑らかになっていることが確認できる。