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,雖然它不是直截了當,我無法得到它的工作。