如何将多个commons.math SummaryStatistics对象一起添加?

时间:2013-03-11 13:29:21

标签: java apache-commons-math

我们分析了集合持续时间的方法以及一堆其他数据点的代码,我们将这些数字存储在一个SummaryStatistics对象中,来自commons math,以提供min,max,mean,count等。但是我们需要刷新这个对象每小时左右一次到磁盘,然后再开始收集下一个。

我的问题是我们如何可靠地将这些值一起添加,所以如果我们有24个汇总统计对象,我们可以显示整天的汇总而不会扭曲数据?对象本身具有运行平均值以及计算的项目数,因此是否有一个实用程序类可以合并两个加权平均值?

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分: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;