Thunderbots Project
Loading...
Searching...
No Matches
statistics_functions.hpp
1#pragma once
2
3#include <cmath>
4#include <numeric>
5#include <vector>
6
16template <typename T>
17double mean(const std::vector<T> data)
18{
19 if (data.size() == 0)
20 {
21 return 0.0;
22 }
23
24 double sum = static_cast<double>(std::accumulate(data.begin(), data.end(), 0.0));
25 return sum / static_cast<double>(data.size());
26}
27
39template <typename T>
40double stdevSample(const std::vector<T> data)
41{
42 double n = static_cast<double>(data.size());
43
44 if (n < 2)
45 {
46 return 0.0;
47 }
48
49 double data_mean = mean(data);
50
51 double sq_residuals = std::accumulate(
52 data.begin(), data.end(), 0.0, [data_mean](double res, double val) {
53 return res + std::pow(static_cast<double>(val) - data_mean, 2);
54 });
55
56 return std::sqrt(sq_residuals / (n - 1));
57}