4

我有很多数据以大型阵列的形式存储在磁盘上。我无法将所有内容完全加载到内存中。

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

4

2 回答 2

10

有一个简单的在线算法,通过查看每个数据点一次并使用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

该算法也称为Welford 方法。与其他答案中建议的方法不同,可以证明它具有很好的数值属性

取方差的平方根得到标准差。

于 2013-03-26T13:49:15.227 回答
6

听起来像一道数学题。对于均值,您知道可以取一大块数据的均值,然后取均值的均值。如果块的大小不同,则必须取加权平均值。

对于标准偏差,您必须先计算方差。我建议在计算平均值的同时这样做。对于方差,你有

Var(X) = Avg(X^2) - Avg(X)^2

因此,计算您的数据的平均值,以及您的 (data^2) 的平均值。如上所述聚合它们,然后取差。

那么标准差就是方差的平方根。

请注意,您可以使用迭代器完成所有操作,这可能是最有效的。

于 2013-03-26T13:48:24.190 回答