大量のデータがディスクに大きな配列で保存されています。メモリ内のすべてを完全にロードすることはできません。
平均と標準偏差をどのように計算できますか?
各データポイントを1回確認し、メモリを使用して平均と分散の両方を計算する単純なオンラインアルゴリズムがあります。O(1)
ウィキペディアは次のコードを提供しています:
def online_variance(data):
n = 0
mean = 0
M2 = 0
for x in data:
n = n + 1
delta = x - mean
mean = mean + delta/n
M2 = M2 + delta*(x - mean)
variance = M2/(n - 1)
return variance
このアルゴリズムは、ウェルフォードの方法としても知られています。他の回答で提案された方法とは異なり、それは素晴らしい数値特性を持っていることを示すことができます。
分散の平方根を取り、標準偏差を取得します。
数学の質問のように聞こえます。つまり、データのチャンクの平均を取り、次に平均をとることができることを知っています。チャンクが同じサイズでない場合は、加重平均を取る必要があります。
標準偏差の場合、最初に分散を計算する必要があります。平均の計算と一緒にこれを行うことをお勧めします。分散については、
Var(X)= Avg(X ^ 2)-Avg(X)^ 2
したがって、データの平均と(data ^ 2)の平均を計算します。上記のようにそれらを集約し、違いを取ります。
その場合、標準偏差は分散の平方根にすぎません。
イテレータを使用してすべてを実行できることに注意してください。これはおそらく最も効率的です。