2013-03-11 4 views
1

У нас есть код профилирования, в котором хранятся долготы методов вместе с кучей других точек данных, и мы сохраняем эти числа внутри объекта SummaryStatistics из commons math, чтобы предоставить минимальное, максимальное, среднее, количество и т. Д. Однако нам нужно очистить этот объект на диск каждый час или около того и начать собирать снова для следующего.Как добавить несколько объектов commons.math SummaryStatistics вместе?

Мой вопрос в том, как мы можем надежно добавлять эти значения вместе, поэтому, если у нас есть 24 объекта суммарной статистики, мы можем отображать сводку за весь день без искажения данных? У самих объектов есть скользящие средние, а также сколько элементов подсчитывается, так же есть ли класс утилиты, который позволит объединить две взвешенные средние?

+0

[Что вы пытались?] (Http://whathaveyoutried.com/) – 2013-03-11 13:34:14

+0

Я усреднил два средства вместе, но, очевидно, это неправильный ответ – user842800

ответ

2

Вы также можете сделать это напрямую, используя AggregateSummaryStatistics. См. Раздел «Вычислить статистику для нескольких выборок и общую статистику одновременно». В разделе statistics руководства пользователя Commons Math.

1

Поскольку вы говорите, что имеете как среднее значение, так и счет, общая формула, которую вы хотите использовать, состоит в том, чтобы суммировать произведение средств по их счету, а затем делить на сумму их счетчиков.

E.g. для двух 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;