- [python - Moving average or running mean - Stack Overflow](https://stackoverflow.com/questions/13728392/moving-average-or-running-mean) ## 1. numpy.convolve: 畳み込み - 時系列全体と現在のウィンドウの間の内積を取得し、それらの合計を取得 ```python mport numpy as np def moving_average(x, w): return np.convolve(x, np.ones(w), 'valid') / w ``` [numpy.convolve — NumPy v1.22 Manual](https://numpy.org/doc/stable/reference/generated/numpy.convolve.html) modeには次の3つの選択肢がある。 - full: デフォルトでは、modeは'full'である。これはオーバーラップの各点での畳み込みを返し、出力形状は(N+M-1,)となる。コンボリューションの終点では、信号は完全に重ならず、境界効果が見られることがある。 - valid: モード 'valid'は長さmax(M, N) - min(M, N) + 1の出力を返す。畳み込み積は, 信号が完全に重なっている点でのみ与えられる. 信号の境界の外側の値は、何の効果もない。 - same: モード 'same' は長さ max(M, N) の出力を返します。境界の効果はまだ見えています。 ## 2. numpy.cumsum: 累積値 [python - Moving average or running mean - Stack Overflow](https://stackoverflow.com/questions/13728392/moving-average-or-running-mean#answer-27681394) ```python def running_mean(x, N): cumsum = numpy.cumsum(numpy.insert(x, 0, 0)) return (cumsum[N:] - cumsum[:-N]) / float(N) ``` ## 3. uniform_filter1d [python - Moving average or running mean - Stack Overflow](https://stackoverflow.com/questions/13728392/moving-average-or-running-mean/43200476#43200476) 1の畳み込みの50倍、2の累積値の2-5倍、効率的な方法。 ```python import scipy.ndimage.filters as ndif def running_mean_uniform_filter1d(x, N): return ndif.uniform_filter1d(x, N, mode='constant', origin=-(N//2))[:-(N-1)] ``` [scipy.ndimage.uniform_filter1d — SciPy v1.8.0 Manual](https://docs.scipy.org/doc/scipy/reference/generated/scipy.ndimage.uniform_filter1d.html) > mode パラメータは,入力配列がどのように境界を越えて拡張されるかを決定します. mode{‘reflect’, ‘constant’, ‘nearest’, ‘mirror’, ‘wrap’}, optional - reflect: 入力は、最後の画素のエッジについて反射して拡張されます。このモードは、ハーフサンプル対称と呼ばれることもあります。 - constant: 入力は,エッジから先のすべての値を,cvalパラメータで定義された同じ定数値で埋めることによって拡張される。 - nearest: 入力は最後の画素を複製することで拡張される。 - mirror: 入力は最後の画素の中心を中心に反射して拡張される。このモードは、全サンプル対称と呼ばれることもあります。 - wrap: 入力は反対側のエッジまで回り込んで拡張されます。 ## 4. bottleneck.move_mean - cumsumやpandasメソッドよりも3〜15倍高速? [GitHub - pydata/bottleneck: Fast NumPy array functions written in C](https://github.com/pydata/bottleneck)