yat/statistics/VectorFunction.cc

Code
Comments
Other
Rev Date Author Line
827 19 Mar 07 peter 1 // $Id$
827 19 Mar 07 peter 2
827 19 Mar 07 peter 3 /*
4359 23 Aug 23 peter 4   Copyright (C) 2007 Peter Johansson
4359 23 Aug 23 peter 5   Copyright (C) 2008 Jari H√§kkinen, Peter Johansson
4359 23 Aug 23 peter 6   Copyright (C) 2012 Peter Johansson
827 19 Mar 07 peter 7
1437 25 Aug 08 peter 8   This file is part of the yat library, http://dev.thep.lu.se/yat
827 19 Mar 07 peter 9
827 19 Mar 07 peter 10   The yat library is free software; you can redistribute it and/or
827 19 Mar 07 peter 11   modify it under the terms of the GNU General Public License as
1486 09 Sep 08 jari 12   published by the Free Software Foundation; either version 3 of the
827 19 Mar 07 peter 13   License, or (at your option) any later version.
827 19 Mar 07 peter 14
827 19 Mar 07 peter 15   The yat library is distributed in the hope that it will be useful,
827 19 Mar 07 peter 16   but WITHOUT ANY WARRANTY; without even the implied warranty of
827 19 Mar 07 peter 17   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
827 19 Mar 07 peter 18   General Public License for more details.
827 19 Mar 07 peter 19
827 19 Mar 07 peter 20   You should have received a copy of the GNU General Public License
1487 10 Sep 08 jari 21   along with yat. If not, see <http://www.gnu.org/licenses/>.
827 19 Mar 07 peter 22 */
827 19 Mar 07 peter 23
2881 18 Nov 12 peter 24 #include <config.h>
2881 18 Nov 12 peter 25
827 19 Mar 07 peter 26 #include "VectorFunction.h"
827 19 Mar 07 peter 27 #include "utility.h"
827 19 Mar 07 peter 28
827 19 Mar 07 peter 29 #include <algorithm>
827 19 Mar 07 peter 30 #include <cassert>
827 19 Mar 07 peter 31 #include <numeric>
827 19 Mar 07 peter 32 #include <vector>
827 19 Mar 07 peter 33
827 19 Mar 07 peter 34 namespace theplu {
827 19 Mar 07 peter 35 namespace yat {
4200 19 Aug 22 peter 36 namespace statistics {
827 19 Mar 07 peter 37
827 19 Mar 07 peter 38   VectorFunction::~VectorFunction(){}
827 19 Mar 07 peter 39
827 19 Mar 07 peter 40
827 19 Mar 07 peter 41   double Max::operator()(const std::vector<double>& vec) const
827 19 Mar 07 peter 42   {
827 19 Mar 07 peter 43     assert(vec.size());
827 19 Mar 07 peter 44     return *(std::max_element(vec.begin(), vec.end()));
827 19 Mar 07 peter 45   }
827 19 Mar 07 peter 46
4200 19 Aug 22 peter 47
827 19 Mar 07 peter 48   double Mean::operator()(const std::vector<double>& vec) const
827 19 Mar 07 peter 49   {
827 19 Mar 07 peter 50     assert(vec.size());
827 19 Mar 07 peter 51     return std::accumulate(vec.begin(), vec.end(), 0.0)/vec.size();
827 19 Mar 07 peter 52   }
827 19 Mar 07 peter 53
4200 19 Aug 22 peter 54
827 19 Mar 07 peter 55   double Median::operator()(const std::vector<double>& vec) const
827 19 Mar 07 peter 56   {
827 19 Mar 07 peter 57     assert(vec.size());
932 05 Oct 07 peter 58     return median(vec.begin(), vec.end());
827 19 Mar 07 peter 59   }
827 19 Mar 07 peter 60
4200 19 Aug 22 peter 61
827 19 Mar 07 peter 62   double Min::operator()(const std::vector<double>& vec) const
827 19 Mar 07 peter 63   {
827 19 Mar 07 peter 64     assert(vec.size());
827 19 Mar 07 peter 65     return *(std::min_element(vec.begin(), vec.end()));
827 19 Mar 07 peter 66   }
827 19 Mar 07 peter 67
4200 19 Aug 22 peter 68
1261 08 Apr 08 peter 69   Nth_Element::Nth_Element(size_t N)
827 19 Mar 07 peter 70     : N_(N) {}
827 19 Mar 07 peter 71
827 19 Mar 07 peter 72
827 19 Mar 07 peter 73   double Nth_Element::operator()(const std::vector<double>& vec) const
827 19 Mar 07 peter 74   {
827 19 Mar 07 peter 75     assert(N_-1<vec.size());
827 19 Mar 07 peter 76     std::vector<double> vec_copy(vec);
827 19 Mar 07 peter 77     std::vector<double>::iterator nth = vec_copy.begin()+(N_-1);
827 19 Mar 07 peter 78     std::nth_element(vec_copy.begin(), nth, vec_copy.end());
827 19 Mar 07 peter 79     return *(nth);
827 19 Mar 07 peter 80   }
827 19 Mar 07 peter 81
827 19 Mar 07 peter 82
827 19 Mar 07 peter 83
4200 19 Aug 22 peter 84
827 19 Mar 07 peter 85 }}} // of namespace statistics, yat, and theplu