MLIB
Loading...
Searching...
No Matches
statpars.h
Go to the documentation of this file.
1/*
2 Copyright (c) Mircea Neacsu (2014-2025) Licensed under MIT License.
3 This file is part of MLIB project. See LICENSE file for full license terms.
4*/
5
7
8#pragma once
9
10#if __has_include("defs.h")
11#include "defs.h"
12#endif
13
14#include <deque>
15
16namespace mlib {
17
20{
21public:
22 statpars (int nmax = 0);
23 statpars (std::vector<double> vec);
24
25 void add (double val);
26 void add (double* vals, int count);
27 void add (std::vector<double> v);
28 void clear ();
29 int count ();
30 double average ();
31 double stdev ();
32 double mad ();
33 double variance ();
34 double skewness ();
35 double kurtosis ();
36
37private:
38 void calculate ();
39 std::deque<double> values;
40 int nmax;
41 bool calc;
42 double sum, adev, var, sdev, skew, kurt;
43};
44
46inline void statpars::add (double val)
47{
48 if (nmax && values.size () == nmax)
49 {
50 sum -= values.front ();
51 values.pop_front ();
52 }
53 values.push_back (val);
54 sum += val;
55 calc = false;
56}
57
59inline void statpars::add (double* vals, int count)
60{
61 for (int i = 0; i < count; i++)
62 add (vals[i]);
63}
64
66inline void statpars::add (std::vector<double> vals)
67{
68 for (double v : vals)
69 add (v);
70}
71
73inline double statpars::average ()
74{
75 if (!values.empty ())
76 return sum / values.size ();
77 else
78 return 0.;
79}
80
82inline double statpars::variance ()
83{
84 if (!calc)
85 calculate ();
86 return var;
87}
88
90inline double statpars::stdev ()
91{
92 if (!calc)
93 calculate ();
94 return sdev;
95}
96
98inline double statpars::mad ()
99{
100 if (!calc)
101 calculate ();
102 return adev;
103}
104
106inline double statpars::skewness ()
107{
108 if (!calc)
109 calculate ();
110 return skew;
111}
112
114inline double statpars::kurtosis ()
115{
116 if (!calc)
117 calculate ();
118 return kurt;
119}
120
122inline int statpars::count ()
123{
124 return (int)values.size ();
125}
126
128inline void statpars::clear ()
129{
130 values.clear ();
131 calc = false;
132 sum = 0.;
133}
134
135} // namespace mlib
statpars(int nmax=0)
Constructor for calculator class.
Definition statpars.cpp:31
void clear()
Calculator reset.
Definition statpars.h:128
double variance()
Return distribution's variance (2nd order moment)
Definition statpars.h:82
double average()
Return distribution's average (first order moment)
Definition statpars.h:73
double skewness()
Return skewness (3rd order moment)
Definition statpars.h:106
double mad()
Return average absolute deviation also called "mean absolute deviation" (MAD)
Definition statpars.h:98
void add(double val)
Add a value to the calculator.
Definition statpars.h:46
double stdev()
Return standard deviation (square root of variance)
Definition statpars.h:90
int count()
Return number of samples.
Definition statpars.h:122
double kurtosis()
Return kurtosis (4th order moment)
Definition statpars.h:114