// Computes average and standard deviation // for data stored in std::vector #include #include #include #include #include void get_stats(const std::vector & x, double & average, double & sigma ) { // average = sum_i=1^N x_i /N // // sum_i=1^N (x_i-)^2 (x-).(x-) // sigma = sqrt( -------------------- ) = sqrt(---------------) // N-1 N-1 using namespace std; int N = x.size(); average = accumulate(x.begin(),x.end(),0.0)/N; // sum up values vector xx(x); // xx = x-; subtract average from all elements transform(x.begin(),x.end(),xx.begin(),bind2nd(minus(),average)); sigma = sqrt(inner_product(xx.begin(),xx.end(),xx.begin(),0.0)/(N-1)); }