6

我有一个数据向量,我想找到数据集的峰度。我想用 Boost 来做到这一点,这就是我目前所拥有的(不可编译):

#include <boost/math/distributions.hpp>
using namespace std;

int main()
{
    vector<double> a;
    a.push_back(-1);
    a.push_back(0);
    a.push_back(1);

    cout << "Kurtosis:"<< kurtosis(a) << endl;
    return 0;
}

为什么这不起作用?我的编译器给了我错误:“[...]\main.cpp|28|error: 'kurtosis' was not declared in this scope|”

4

1 回答 1

1

对于一个你没有包括标题kurtosis

#include <boost/accumulators/statistics/kurtosis.hpp>

即使您这样做了,正如您所看到的那样,它不适用于直接vector,您可能想要做的就是使用一个accumulator_set和更多的标题。

这是一个使用 的最小示例accumulator_set,它显示了解决问题的两种方法:

#include <boost/math/distributions.hpp>
#include <boost/accumulators/accumulators.hpp>
#include <boost/accumulators/statistics/stats.hpp>
#include <boost/accumulators/statistics/mean.hpp>
#include <boost/accumulators/statistics/variance.hpp>
#include <boost/accumulators/statistics/kurtosis.hpp>
#include <iostream>
#include <vector>

using namespace boost::accumulators;

int main()
{
    accumulator_set<double, stats<tag::mean, tag::kurtosis > > acc;
    accumulator_set<double, stats<tag::mean, tag::kurtosis > > acc2;

    acc(2) ;
    acc(3) ;
    acc(4) ;

    std::cout << mean(acc) << " " << kurtosis(acc) << std::endl ;

    std::vector<double> v1 ;

    v1.push_back(2);
    v1.push_back(3);
    v1.push_back(4);

    acc2 = std::for_each( v1.begin(), v1.end(), acc2 ) ;

    std::cout << mean(acc2) << " " << kurtosis(acc2) << std::endl ;
}

这是Accumulators Framework 用户指南的链接。本指南有一些很好的例子。

这个先前的线程找到了一种使用方法vector,虽然它根本不是直截了当的,我无法让它工作。

于 2013-03-05T14:49:45.237 回答