[解決済み] 標準偏差を効率的に計算するには?
質問
数値のリストの配列があります。
[0] (0.01, 0.01, 0.02, 0.04, 0.03)
[1] (0.00, 0.02, 0.02, 0.03, 0.02)
[2] (0.01, 0.02, 0.02, 0.03, 0.02)
...
[n] (0.01, 0.00, 0.01, 0.05, 0.03)
私がやりたいことは、リストの各インデックスで、すべての配列要素に渡って平均と標準偏差を効率的に計算することです。
平均を計算するために、私は配列を通してループし、リストの与えられたインデックスで値を合計しています。最後に、私は自分の "平均リスト" の各値を次のように割ります。
n
で割ります (私は母集団を扱っているのであって、母集団からのサンプルではありません)。
標準偏差を計算するために、平均を計算した後、もう一度ループします。
私は、平均のために一度、そして(平均を得た後)SDのために一度、配列を2回通過することを避けたいと思います。
配列を一度だけ通過して、両方の値を計算するための効率的な方法はありますか?インタープリタ型言語(PerlやPythonなど)または疑似コードでどんなコードでも結構です。
どのように解決するのですか?
答えは、Welfordのアルゴリズムを使うことです。これは、quot;naive methods"の後に非常に明確に定義されています。
- ウィキペディア 分散を計算するためのアルゴリズム
これは、他の回答で提案された2パスまたはオンラインの単純二乗和コレクターのいずれよりも数値的に安定しています。 安定性は、いわゆる「"」につながるような、互いに近い値をたくさん持っている場合にのみ、本当に重要になります。 壊滅的なキャンセル 浮動小数点の文献では、「破局的キャンセル」と呼ばれています。
また、分散計算におけるサンプル数 (N) で割ることと N-1 で割ることの違い (二乗偏差) についてブラッシュアップしておくとよいでしょう。 N-1で割ると標本からの分散の不偏推定になりますが、Nで割ると平均的に分散を過小評価します(標本平均と真の平均の間の分散が考慮されないため)。
私はこのトピックについて、以前の値をオンラインで削除する方法を含む、より詳細に踏み込んだ 2 つのブログ エントリを書きました。
javadoc、ソース、ユニットテストはすべてオンラインで見ることができます。
関連
-
[解決済み] プログラムの実行やシステムコマンドの呼び出しはどのように行うのですか?
-
[解決済み] リストのリストからフラットなリストを作るには?
-
[解決済み] Pythonで現在時刻を取得する方法
-
[解決済み] 辞書を値で並べ替えるにはどうしたらいいですか?
-
[解決済み] Pythonで辞書に新しいキーを追加するにはどうすればよいですか?
-
[解決済み] リストが空かどうかを確認するにはどうすればよいですか?
-
[解決済み】ネストされたディレクトリを安全に作成するには?
-
[解決済み】2つの辞書を1つの式でマージする(辞書の和をとる)には?)
-
[解決済み] バブルソートの宿題
-
[解決済み] 値で列挙名を取得する [重複]。
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 前月の日時オブジェクトを返す
-
[解決済み] Pandasのデータフレームでタプルの列を分割するにはどうしたらいいですか?
-
[解決済み] googletransがエラー 'NoneType' オブジェクトに 'group' 属性がない、と言って動かなくなった。
-
[解決済み] dict を txt ファイルに書き、それを読み取る?
-
[解決済み] ファブリック経由でデプロイユーザとしてvirtualenvを有効化する
-
[解決済み] python-requests モジュールからのすべてのリクエストをログに記録します。
-
[解決済み] SQLAlchemy - テーブルのリストを取得する
-
[解決済み] Ctrl-CでPythonスクリプトを終了できない
-
[解決済み] subprocess.run()の出力を抑制またはキャプチャするには?
-
[解決済み] Pythonの文字列の前にあるbという接頭辞は何を意味するのですか?