Archives par mot-clé : écart type

Écart type en une passe

On a souvent besoin de calculer quelques statistiques sur un ensemble de données. Si calculer la moyenne en une passe est trivial, le calcul de l’écart type demande un peu d’attention. Ci-dessous, une solution que je poste comme pense-bête.

Le snippet calcule aussi les valeurs min et max.

Code snippet :

manual = "std::vector<int> vec;  // Container with values
uint64_t count = 0;
uint64_t accu = 0;
uint64_t accu2 = 0;
uint64_t min = -1;
uint64_t max = 0;

for_each(begin(vec), end(vec), [&](int x){
accu = x;
accu2 = x * x;
min = (std::min)(min, x);
max = (std::max)(max, x);
count;
});

float average = accu / float(count);
float stdev = sqrt(accu2 * count - accu * accu) / count;
Écart type en une passe