我在磁盘中存储了大量数据。我无法将所有内容完全加载到内存中。
如何计算平均值和标准差?
答案 0 :(得分:8)
有一个简单的online algorithm通过查看每个数据点并使用O(1)
内存来计算均值和方差。
维基百科offers the following code:
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
此算法也称为Welford's method。与其他答案中建议的方法不同,它可以显示为nice numerical properties。
取方差的平方根得到标准偏差。
答案 1 :(得分:5)
听起来像是一个数学问题。对于平均值,您知道可以采用一大块数据的均值,然后采用均值。如果块的大小不同,则必须采用加权平均值。
对于标准差,您必须先计算方差。我建议在计算均值的同时做这个。对于差异,你有
Var(X)= Avg(X ^ 2) - Avg(X)^ 2
因此,计算数据的平均值和平均值(数据^ 2)。如上所述汇总它们,并采取差异。
然后标准偏差就是方差的平方根。
请注意,您可以使用迭代器执行整个操作,这可能是最有效的。