31#ifndef ETL_COVARIANCE_INCLUDED
32#define ETL_COVARIANCE_INCLUDED
43 namespace private_covariance
48 template <
typename TInput,
typename TCalc>
57 template <
typename TCalc>
66 template <
typename TCalc>
69 typedef double calc_t;
76 namespace private_covariance
78 template<
typename T =
void>
81 static ETL_CONSTANT
bool Sample =
false;
82 static ETL_CONSTANT
bool Population =
true;
99 template <
bool Covariance_Type,
typename TInput,
typename TCalc = TInput>
106 static ETL_CONSTANT
int Adjustment = (Covariance_Type == covariance_type::Population) ? 0 : 1;
108 typedef typename private_covariance::covariance_traits<TInput, TCalc>::calc_t calc_t;
123 template <
typename TIterator>
124 covariance(TIterator first1, TIterator last1, TIterator first2)
127 add(first1, last1, first2);
133 void add(TInput value1, TInput value2)
135 inner_product += TCalc(value1 * value2);
136 sum1 += TCalc(value1);
137 sum2 += TCalc(value2);
145 template <
typename TIterator>
146 void add(TIterator first1, TIterator last1, TIterator first2)
148 while (first1 != last1)
150 add(*first1, *first2);
169 template <
typename TIterator>
170 void operator ()(TIterator first1, TIterator last1, TIterator first2)
172 add(first1, last1, first2);
182 covariance_value = 0.0;
186 double n = double(counter);
187 double adjustment = 1.0 / (n * (n - Adjustment));
189 covariance_value = ((n * inner_product) - (sum1 * sum2)) * adjustment;
195 return covariance_value;
201 operator double()
const
211 return size_t(counter);
219 inner_product = calc_t(0);
223 covariance_value = 0.0;
229 calc_t inner_product;
233 mutable double covariance_value;
234 mutable bool recalculate;
237 template <
bool Covariance_Type,
typename TInput,
typename TCalc>
238 ETL_CONSTANT
int covariance<Covariance_Type, TInput, TCalc>::Adjustment;
Covariance.
Definition: covariance.h:103
void clear()
Clear the covariance.
Definition: covariance.h:217
double get_covariance() const
Get the covariance.
Definition: covariance.h:178
size_t count() const
Get the total number added entries.
Definition: covariance.h:209
covariance()
Constructor.
Definition: covariance.h:115
covariance(TIterator first1, TIterator last1, TIterator first2)
Constructor.
Definition: covariance.h:124
void add(TIterator first1, TIterator last1, TIterator first2)
Add a range.
Definition: covariance.h:146
void operator()(TInput value1, TInput value2)
Definition: covariance.h:160
void add(TInput value1, TInput value2)
Add a pair of values.
Definition: covariance.h:133
bitset_ext
Definition: absolute.h:38
Definition: functional.h:125
Definition: covariance.h:93
Types for generic covariance.
Definition: covariance.h:50
Definition: covariance.h:80