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" 33 namespace normalizer {
37 class UnityScalerFactor
41 template<
typename Iterator>
42 double operator()(Iterator first, Iterator last)
const 44 using traits =
typename utility::weighted_iterator_traits<Iterator>;
45 return calculate(first, last,
typename traits::type());
50 template<
typename Iterator>
51 double calculate(Iterator first, Iterator last,
52 utility::unweighted_iterator_tag tag)
const 54 return 1.0 / std::accumulate(utility::data_iterator(first),
55 utility::data_iterator(last),
60 template<
typename Iterator>
61 double calculate(Iterator first, Iterator last,
62 utility::weighted_iterator_tag tag)
const 64 statistics::AveragerWeighted averager;
65 add(averager, first, last);
66 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:88
Definition: RangeNormalizer.h:64