1

我们有分析代码,它收集方法的持续时间以及一堆其他数据点,我们将这些数字存储在来自 commons 数学的 SummaryStatistics 对象中,以提供最小值、最大值、平均值、计数等。但是我们需要将此对象刷新到每隔一小时左右磁盘一次,然后再次开始收集下一个。

我的问题是我们如何才能可靠地将这些值加在一起,所以如果我们有 24 个汇总统计对象,我们可以在不扭曲数据的情况下显示一整天的汇总?对象本身具有运行平均值以及计数的项目数,那么是否有一个实用程序类可以组合两个加权平均值?

4

2 回答 2

2

您也可以使用AggregateSummaryStatistics直接执行此操作。请参阅Commons Math 用户指南的统计部分中标题为“同时计算多个样本的统计数据和整体统计数据”的部分。

于 2013-04-06T03:20:23.033 回答
1

既然你说你有平均值和计数,你想使用的一般公式是将平均值的乘积除以它们的计数,然后除以它们的计数总和。

例如,对于两个SummaryStatistics对象AB,您将使用:

double weightedMean = (A.getMean() * A.getN() + B.getMean() * B.getN()) /
                      (A.getN() + B.getN());

对于他们中的许多人(例如List其中一个称为“manyStats”),您可能会执行以下操作:

double accum = 0.0;
long n = 0;
for (SummaryStatisics s: manyStats) {
  accum += s.getMean() * s.getN();
  n += s.getN();
}
double weightedMean = accum / n;
于 2013-03-12T00:59:07.270 回答