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