acme_tensor/stats/
impl_stats.rs

1use super::Statistics;
2use crate::prelude::Scalar;
3use crate::TensorBase;
4
5impl<T> TensorBase<T> {
6    pub fn max(&self) -> &T
7    where
8        T: Ord,
9    {
10        self.iter().max().unwrap()
11    }
12
13    pub fn mean(&self) -> T
14    where
15        T: Scalar,
16    {
17        self.sum() / T::from_usize(self.size()).unwrap()
18    }
19
20    pub fn min(&self) -> &T
21    where
22        T: Ord,
23    {
24        self.iter().min().unwrap()
25    }
26
27    pub fn sort(&mut self)
28    where
29        T: Ord,
30    {
31        self.data_mut().sort();
32    }
33
34    pub fn std(&self) -> T
35    where
36        T: Scalar,
37    {
38        self.variance().sqrt()
39    }
40
41    pub fn variance(&self) -> T
42    where
43        T: Scalar,
44    {
45        let mean = self.mean();
46        self.iter().map(|x| (*x - mean).powi(2)).sum::<T>() / T::from_usize(self.size()).unwrap()
47    }
48}
49
50impl<T> Statistics<T> for TensorBase<T>
51where
52    T: Ord + Scalar,
53{
54    fn max(&self) -> T {
55        *self.max()
56    }
57
58    fn mean(&self) -> T {
59        self.mean()
60    }
61
62    fn median(&self) -> T {
63        self.data().median()
64    }
65
66    fn min(&self) -> T {
67        *self.min()
68    }
69
70    fn mode(&self) -> T {
71        self.data().mode()
72    }
73
74    fn sum(&self) -> T {
75        self.sum()
76    }
77
78    fn std(&self) -> T {
79        self.std()
80    }
81
82    fn variance(&self) -> T {
83        self.variance()
84    }
85}