是否有可能获得跨进程分割的一组数字的平均值?

时间:2014-07-11 20:58:05

标签: math distributed distributed-computing

在数学SE上得到了一个很好的答案:https://math.stackexchange.com/questions/864657/can-i-get-the-correct-average-of-a-set-of-numbers-from-the-averages-of-several-s

假设我有一串数字:

565
212
812
895
443
73
468
900
299
993
252
740
291
112
(and thousands more)

我收到的每条消息都包含需要处理的数字和其他一些内容。一些处理可能很耗时,所以我想把它分成多个进程。我想将这些数字发送到圆形(或ZMQ路由器/经销商)风格的n进程之一,并对数字进行一些处理。问题是我希望在不同的流程中保持所有数字的滚动平均值

INPUT -> Worker #n -> Average collector -> OUTPUT

如果我将数字分成三个一组并取出子集的平均值,然后是三个平均值的平均值,我得到的结果不正确。是否可以跨多个流程拆分这项工作?另一种方法是将数字推送到Averager进程。这似乎很好,但我想知道是否有一个更简单的解决方案,我错过了。

1 个答案:

答案 0 :(得分:1)

问题取决于sufficient statistics的概念。为了计算整个组的统计信息,您需要为每个子组提供足够的统计信息。对于均值,足够的统计数据是每个子组的数据数量和每个子组的数据总数。通过每个子组的这两个项目,您可以精确计算整个组的平均值。

对于整个组的方差(等效,标准偏差),足够的统计数据是每个子组的数据数量,数据总数和数据平方总数。

足够的统计数据不一定比整个子群更简洁,但对于均值和方差,您只需要几个项目。