C/C++で、平均値、最大値、最小値、分散、中央値等の統計量を計算するなら、boost::accumulators が便利。
2017年6月13日追記.情報が古かったので更新しました
#include <iostream> #include <boost/accumulators/accumulators.hpp> #include <boost/accumulators/statistics.hpp> using namespace boost::accumulators; int main() { accumulator_set<double, stats<tag::mean, tag::min, tag::max, tag::variance> > acc; acc(1.2); acc(2.3); acc(3.4); acc(4.5); std::cout << "mean: " << mean(acc) << std::endl; std::cout << "min: " << min(acc) << std::endl; std::cout << "max: " << max(acc) << std::endl; std::cout << "var: " << variance(acc) << std::endl; return 0; }
すでにデータが配列に格納されているなら、こんな感じ。
#include <iostream> #include <boost/accumulators/accumulators.hpp> #include <boost/accumulators/statistics.hpp> using namespace boost::accumulators; int main() { accumulator_set<double, stats<tag::mean, tag::min, tag::max> > acc; double data[]={1.2, 2.3, 3.4, 4.5}; for ( auto x : data ) { acc(x); } std::cout << "Mean: " << mean(acc) << std::endl; std::cout << "min: " << min(acc) << std::endl; std::cout << "max: " << max(acc) << std::endl; return 0; }
stats