acme_tensor/stats/
impl_stats.rs1use 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}