2012-05-13 11 views
11

Recientemente he descubierto los excelentes acumuladores de Library :: accumulators, y me gustaría utilizarlo para reemplazar parte de mi código que acumula estadísticas.Sumando dos impulso :: instancias accumulator_set

Una cosa que no puedo encontrar en la documentación es la capacidad de resumir dos conjuntos de acumuladores, como en el operador + =

Ejemplo:

using namespace boost::accumulators; 
typedef accumulator_set<double, features<tag::variance> > AccumSet; 

class Foo { 
    AccumSet acc; 
public: 
    Foo& operator+=(const Foo& that) { 
     this->acc += that.acc; // error! no such operator 
     return *this; 
    } 
    double GetVariance() { return variance(acc); } 
}; 

¿Cómo puedo lograr esto mediante la API disponible? No sé si esto se puede implementar para todos los tipos de acumuladores en la biblioteca (tal vez no para cola), pero seguro puede ser para cosas importantes, como contar, sumar, media, momento, covarianza, etc.

+0

También se olvida de 'devolver * esto;', aunque esto no está relacionado. – Matt

+0

@Matt, junto al punto, pero aún vale la pena arreglarlo ... – killogre

Respuesta

3

Desafortunadamente, esta característica no es proporcionada por Boost.Accumulators, probablemente porque la combinación solo funcionaría para algunas estadísticas.

Hay a ticket on the Boost tracker solicitando la función combine.

+0

Gracias. Llegué a la misma conclusión después de mirar alrededor y publicar en la lista de correo de impulso. No estaba al tanto de ese boleto, ¡aunque lo abrieron hace 4 años! Mi pregunta es si hay alguna solución para las estadísticas que pueden ser compatibles. – killogre

1

No existe un operador apropiado y disponible + = para agregar dos objetos accumulator_set <>.