我们分析了集合持续时间的方法以及一堆其他数据点的代码,我们将这些数字存储在一个SummaryStatistics对象中,来自commons math,以提供min,max,mean,count等。但是我们需要刷新这个对象每小时左右一次到磁盘,然后再开始收集下一个。
我的问题是我们如何可靠地将这些值一起添加,所以如果我们有24个汇总统计对象,我们可以显示整天的汇总而不会扭曲数据?对象本身具有运行平均值以及计算的项目数,因此是否有一个实用程序类可以合并两个加权平均值?
答案 0 :(得分:2)
您也可以使用AggregateSummaryStatistics直接执行此操作。请参阅“Commons Math用户指南”的statistics部分中标题为“同时计算多个样本和总体统计信息的统计信息”一节。
答案 1 :(得分:1)
既然你说你有平均数和计数数,那么你想要使用的通用公式就是将平均值的乘积与计数相加,然后除以它们的计数之和。
例如,对于两个SummaryStatistics
个对象A
和B
,您可以使用:
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;