使用python计算不适合内存的数据的均值和标准差

时间:2013-03-26 13:44:26

标签: python statistics

我在磁盘中存储了大量数据。我无法将所有内容完全加载到内存中。

如何计算平均值和标准差?

2 个答案:

答案 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)。如上所述汇总它们,并采取差异。

然后标准偏差就是方差的平方根。

请注意,您可以使用迭代器执行整个操作,这可能是最有效的。