icentral_stats/
speedup_stats.rs

1crate::ix!();
2
3#[derive(Debug)]
4pub struct SpeedupStats {
5    pub mean:   f64,
6    pub stddev: f64,
7    pub median: f64,
8    pub min:    f64,
9    pub max:    f64,
10}
11
12impl From<&mut Vec<f64>> for SpeedupStats {
13
14    fn from(x: &mut Vec<f64>) -> Self {
15
16        x.sort_by(|a,b| FloatOrd(*a).cmp(&FloatOrd(*b)));
17
18        let n = x.len();
19
20        let min = x[0];
21        let max = *x.iter().last().unwrap();
22
23        let sum: f64 = x.iter().sum();
24
25        let mean   = sum / n as f64;
26        let median = x[n / 2];
27
28        let mut sum_2: f64 = 0.0;
29
30        for i in 0..n {
31
32            sum_2 += {
33
34                let t0 = x[i] - mean;
35                let t1 = x[i] - mean;
36
37                t0 * t1
38            };
39        }
40
41        let stddev = (sum_2 / n as f64).sqrt();
42
43        Self { min, max, mean, median, stddev }
44    }
45}