将列表的平均值计算到子列表中

时间:2014-06-11 14:15:53

标签: python statistics

如果我有一个大的列表或numpy数组或其他我需要分成子列表,我怎么能有效地计算整个列表的stadistics(平均值,标准偏差等)?

举一个简单的例子,让我们说我有这个小清单:

l = [2,1,4,1,2,1,3,2,1,5]
>>> mean(l)
2.2000000000000002

但是,如果由于某种原因我需要拆分成子列表:

l1 = [2,1,4,1]
l2 = [2,1,3,2]
l3 = [1,5]

当然,你不需要了解很多关于数学的知识就知道这是不正确:

mean(l) = mean(mean(l1), mean(l2), mean(l3))

如果所有列表和每个列表的长度相同,则可能是这样,在这种情况下不是这样。

这个问题的背景与你有一个不适合内存的非常大的数据集的情况有关,因此,你需要将它拆分成chucks。

2 个答案:

答案 0 :(得分:2)

通常,您需要为每个子集保留所谓的足够统计信息。对于均值和标准差,足够的统计数据是数据的数量,它们的总和以及它们的平方和。给定每个子集的3个量,您可以计算整个集合的均值和标准差。

足够的统计数据不一定小于子集本身。但对于均值和标准差,足够的统计数据只是几个数字。

答案 1 :(得分:0)

我假设您知道您拥有的数据点数,即len(l)?然后你可以单独计算每个列表的总和(即Map-reduce)或运行总和(即,如果你正在做一个readline()),然后在最后除以len(l)?