2013-03-05 71 views
6

我有一个数据向量,我想要找到数据集的峰度。我想与升压这样做,这里是我迄今为止(未编译):为数据集寻找峰度提高

#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 |错误:'kurtosis'未在此范围内声明|”

+3

如果不编译,发布编译器错误 – mathematician1975 2013-03-05 12:13:01

+1

该函数在另一个命名空间中,您需要使用'boost :: some :: namespace :: kurtosis(a)'。用实际的(我不知道的)命名空间替换'some :: namespace'。 – 2013-03-05 12:17:42

+1

免责声明:我对问题域不够了解,无法确定我在说什么。我的猜测是,中的算法仅适用于[参数化预定义分布](http://www.boost.org/libs/math/doc/sf_and_dist/html/math_toolkit/dist/dist_ref /dists.html)。使用数据集的替代方案可以是[Boost.Accumulators](http://www.boost.org/libs/accumulators)。 [Here](http://liveworkspace.org/code/2cDjQ9$0)就是一个例子。 – 2013-03-05 13:46:30

回答

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 FrameworkUser's Guide的链接。本指南有一些很好的例子。

此前thread找到了一种方法来使用vector,虽然它不是直截了当,我无法得到它的工作。