1 #ifndef _theplu_yat_normalizer_unity_scaler_ 2 #define _theplu_yat_normalizer_unity_scaler_ 25 #include "RangeNormalizer.h" 26 #include "yat/statistics/AveragerWeighted.h" 27 #include "yat/utility/DataIterator.h" 34 namespace normalizer {
38 class UnityScalerFactor
42 template<
typename Iterator>
43 double operator()(Iterator first, Iterator last)
const 45 using traits =
typename utility::weighted_iterator_traits<Iterator>;
46 return calculate(first, last,
typename traits::type());
51 template<
typename Iterator>
52 double calculate(Iterator first, Iterator last,
53 utility::unweighted_iterator_tag tag)
const 55 return 1.0 / std::accumulate(utility::data_iterator(first),
56 utility::data_iterator(last),
61 template<
typename Iterator>
62 double calculate(Iterator first, Iterator last,
63 utility::weighted_iterator_tag tag)
const 65 statistics::AveragerWeighted averager;
66 add(averager, first, last);
67 return 1.0 / averager.sum_wx();
The Department of Theoretical Physics namespace as we define it.
void add(T &o, ForwardIterator first, ForwardIterator last, const classifier::Target &target)
Definition: utility.h:320
RangeNormalizer< detail::UnityScalerFactor, std::multiplies< double > > UnityScaler
Scale a range to unity.
Definition: UnityScaler.h:89
Definition: RangeNormalizer.h:64