使用Python计算无法在内存中存放的数据的均值和标准差

4 投票
2 回答
7045 浏览
提问于 2025-04-17 20:18

我有很多数据存储在磁盘上,都是一些很大的数组。我不能一次性把所有数据都加载到内存里。

那我该怎么计算这些数据的平均值和标准差呢?

2 个回答

6

听起来像是个数学问题。对于平均值,你可以先计算一部分数据的平均值,然后再计算这些平均值的平均。如果这些部分的大小不一样,你就需要用加权平均来处理。

至于标准差,你需要先计算方差。我建议在计算平均值的时候顺便一起算方差。方差的计算公式是:

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

也就是说,你先计算你的数据的平均值和这些数据平方后的平均值。然后像上面那样把它们结合起来,最后求出它们的差。

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

值得注意的是,你可以用迭代器来完成整个过程,这样可能会更高效。

11

有一种简单的在线算法,它可以通过一次查看每个数据点来计算平均值和方差,并且只需要使用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的方法。与其他答案中建议的方法不同,它被证明具有良好的数值特性

要得到标准差,只需对方差开平方。

撰写回答