Changeset 1523


Ignore:
Timestamp:
Sep 23, 2008, 7:32:49 PM (13 years ago)
Author:
Peter
Message:

fixes #442

Location:
trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/test/normalization_test.cc

    r1521 r1523  
    7474  for (size_t i=0; i<vec.size(); ++i)
    7575    suite.add(suite.equal(vec[i], static_cast<double>(i)-1.0));
     76
     77  std::vector<utility::DataWeight> vec2;
     78  vec2.push_back(utility::DataWeight(1,1));
     79  vec2.push_back(utility::DataWeight(2,0.5));
     80  vec2.push_back(utility::DataWeight(2,0.5));
     81  std::vector<utility::DataWeight> vec3(vec2.size());
     82  c(vec2.begin(), vec2.end(), vec3.begin());
     83  for (size_t i=0; i<vec2.size(); ++i)
     84    suite.add(suite.equal(vec3[i].weight(), vec2[i].weight()));
     85  suite.add(suite.equal(vec3[0].data(), -0.5));
     86  suite.add(suite.equal(vec3[1].data(), 0.5));
     87  suite.add(suite.equal(vec3[2].data(), 0.5));
     88
    7689}
    7790
  • trunk/yat/normalizer/Centralizer.h

    r1497 r1523  
    2222
    2323#include "yat/statistics/Average.h"
     24#include "yat/utility/DataIterator.h"
     25#include "yat/utility/iterator_traits.h"
     26#include "yat/utility/WeightIterator.h"
    2427
    2528#include <algorithm>
     
    7376                              OutputIterator result) const
    7477    {
     78      typename utility::weighted_iterator_traits<InputIterator>::type tag;
     79      return normalize(first, last, result, tag);
     80                       
     81    }
     82
     83  private:
     84    UnaryFunction func_;
     85
     86    // unweighted version
     87    template<class InputIterator, class OutputIterator>
     88    OutputIterator normalize(InputIterator first, InputIterator last,
     89                             OutputIterator result,
     90                             utility::unweighted_iterator_tag tag) const
     91    {
    7592      return std::transform(first, last,
    7693                            result, std::bind2nd(std::minus<double>(),
     
    7895    }
    7996
    80   private:
    81     UnaryFunction func_;
     97
     98    // weighted version
     99    template<class InputIterator, class OutputIterator>
     100    OutputIterator normalize(InputIterator first, InputIterator last,
     101                             OutputIterator result,
     102                             utility::weighted_iterator_tag tag) const
     103    {
     104      std::copy(utility::weight_iterator(first),
     105                utility::weight_iterator(last),
     106                utility::weight_iterator(result));
     107      std::transform(utility::data_iterator(first),
     108                     utility::data_iterator(last),
     109                     utility::data_iterator(result),
     110                     std::bind2nd(std::minus<double>(),
     111                                  func_(first, last)));
     112      return result + std::distance(first, last);
     113    }
     114
    82115  };
    83116
Note: See TracChangeset for help on using the changeset viewer.