[解決済み】python + NumPy / SciPyを使用してローリング/移動平均を計算する方法は?
質問
numpy/scipyには単純に移動平均を計算する関数がないようで、以下のようなことが起こります。 複雑な解決策 .
私の疑問は2つあります。
- numpyで移動平均を(正しく)実装する最も簡単な方法は何ですか?
- これは自明ではなく、エラーが起こりやすいと思われるので 電池込み この場合は?
解決方法は?
これを実現する簡単な方法として
np.convolve
.
を活用することです。
離散コンボリューション
が計算され、それを使って
ローリング平均
. の列で畳み込むことによって行うことができる.
np.ones
を、希望するスライディングウィンドウの長さと同じ長さにする。
そのために、次のような関数を定義することができる。
def moving_average(x, w):
return np.convolve(x, np.ones(w), 'valid') / w
この関数は、シーケンス
x
と、長さが1であるものの列
w
. ただし、選択された
mode
は
valid
x = np.array([5,3,8,10,2,1,5,1,0,2])
2
moving_average(x, 2)
# array([4. , 5.5, 9. , 6. , 1.5, 3. , 3. , 0.5, 1. ])
4
moving_average(x, 4)
# array([6.5 , 5.75, 5.25, 4.5 , 2.25, 1.75, 2. ])
convolve
どのように {コード は働くのか?
離散畳み込みがどのように計算されているか、もう少し詳しく見てみましょう。
次の関数は、以下のような方法を再現することを目的としています。
np.convolve
が出力値を計算しています。
def mov_avg(x, w):
for m in range(len(x)-(w-1)):
yield sum(np.ones(w) * x[m:m+w]) / w
上記の同じ例では、次のようになります。
list(mov_avg(x, 2))
# [4.0, 5.5, 9.0, 6.0, 1.5, 3.0, 3.0, 0.5, 1.0]
つまり、各ステップで行われているのは、1の配列と現在の
ウィンドウ
. この場合
np.ones(w)
sum
w=4
[1,1,1,1]
[5,3,8,10,2,1,5,1,0,2]
= (1*5 + 1*3 + 1*8 + 1*10) / w = 6.5
[1,1,1,1]
[5,3,8,10,2,1,5,1,0,2]
= (1*3 + 1*8 + 1*10 + 1*2) / w = 5.75
というように、すべてのオーバーラップが実行されると、シーケンスの移動平均が返されます。
関連
-
[解決済み] [Solved] sklearn error ValueError: 入力に NaN、infinity または dtype('float64') に対して大きすぎる値が含まれている。
-
[解決済み】Python Error: "ValueError: need more than 1 value to unpack" (バリューエラー:解凍に1つ以上の値が必要です
-
[解決済み】django インポートエラー - core.managementという名前のモジュールがない
-
[解決済み] Pythonで現在時刻を取得する方法
-
[解決済み] Pythonで2つのリストを連結する方法は?
-
[解決済み] Pythonでファイルやフォルダを削除する方法は?
-
[解決済み] Pythonで文字列の部分文字列を取得するにはどうすればよいですか?
-
[解決済み] pipでPythonの全パッケージをアップグレードする方法
-
[解決済み] Pythonの辞書からキーを削除するにはどうしたらいいですか?
-
[解決済み] Pythonで文字列を小文字にするには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
ピロウズ画像色処理の具体的な活用方法
-
Evidentlyを用いたPythonデータマイニングによる機械学習モデルダッシュボードの作成
-
Python入門 openを使ったファイルの読み書きの方法
-
Pythonの画像ファイル処理用ライブラリ「Pillow」(グラフィックの詳細)
-
[解決済み】RuntimeWarning: invalid value encountered in double_scalars で numpy の除算ができない。
-
[解決済み] [Solved] sklearn error ValueError: 入力に NaN、infinity または dtype('float64') に対して大きすぎる値が含まれている。
-
[解決済み】syntaxError: 'continue' がループ内で適切に使用されていない
-
[解決済み】Flask ImportError: Flask という名前のモジュールがない
-
[解決済み】cアンダースコア式`c_`は、具体的に何をするのですか?
-
[解決済み】移動平均と移動平均