31#ifndef ETL_COVARIANCE_INCLUDED
32#define ETL_COVARIANCE_INCLUDED
47 template <
typename TInput,
typename TCalc>
56 template <
typename TCalc>
65 template <
typename TCalc>
68 typedef double calc_t;
77 template<
typename T =
void>
80 static ETL_CONSTANT
bool Sample =
false;
81 static ETL_CONSTANT
bool Population =
true;
85 ETL_CONSTANT
bool covariance_type_statics<T>::Sample;
88 ETL_CONSTANT
bool covariance_type_statics<T>::Population;
98 template <
bool Covariance_Type,
typename TInput,
typename TCalc = TInput>
105 static ETL_CONSTANT
int Adjustment = (Covariance_Type == covariance_type::Population) ? 0 : 1;
107 typedef typename private_covariance::covariance_traits<TInput, TCalc>::calc_t calc_t;
122 template <
typename TIterator>
123 covariance(TIterator first1, TIterator last1, TIterator first2)
126 add(first1, last1, first2);
132 void add(TInput value1, TInput value2)
134 inner_product += TCalc(value1 * value2);
135 sum1 += TCalc(value1);
136 sum2 += TCalc(value2);
144 template <
typename TIterator>
145 void add(TIterator first1, TIterator last1, TIterator first2)
147 while (first1 != last1)
149 add(*first1, *first2);
168 template <
typename TIterator>
169 void operator ()(TIterator first1, TIterator last1, TIterator first2)
171 add(first1, last1, first2);
181 covariance_value = 0.0;
185 double n = double(counter);
186 double adjustment = 1.0 / (n * (n - Adjustment));
188 covariance_value = ((n * inner_product) - (sum1 * sum2)) * adjustment;
194 return covariance_value;
200 operator double()
const
210 return size_t(counter);
218 inner_product = calc_t(0);
222 covariance_value = 0.0;
228 calc_t inner_product;
232 mutable double covariance_value;
233 mutable bool recalculate;
236 template <
bool Covariance_Type,
typename TInput,
typename TCalc>
237 ETL_CONSTANT
int covariance<Covariance_Type, TInput, TCalc>::Adjustment;
void clear()
Clear the covariance.
Definition covariance.h:216
double get_covariance() const
Get the covariance.
Definition covariance.h:177
size_t count() const
Get the total number added entries.
Definition covariance.h:208
covariance()
Constructor.
Definition covariance.h:114
covariance(TIterator first1, TIterator last1, TIterator first2)
Constructor.
Definition covariance.h:123
void add(TIterator first1, TIterator last1, TIterator first2)
Add a range.
Definition covariance.h:145
void operator()(TInput value1, TInput value2)
Definition covariance.h:159
void add(TInput value1, TInput value2)
Add a pair of values.
Definition covariance.h:132
Covariance Type.
Definition covariance.h:43
bitset_ext
Definition absolute.h:39
binary_function
Definition functional.h:161
Definition covariance.h:92
Types for generic covariance.
Definition covariance.h:49
Definition covariance.h:79