2013-03-05 14 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 | error: 'kurtosis'はこのスコープで宣言されていませんでした。あなたはkurtosisのヘッダを含めていなかった1については

+3

コンパイルエラーがある場合 – mathematician1975

+1

この関数は別の名前空間にあり、 'boost :: some :: namespace :: kurtosis(a)'を使う必要があります。 'some :: namespace'を実際の(わからない)名前空間に置き換えます。 –

+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)がその一例です。 –

答えて

1

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

あなたがやったとしても、あなたはそれはあなたがおそらく何をしたいのか、まっすぐvectorでは動作しません見としてはaccumulator_setを使用し、より多くのヘッダーも。ここ

は、この問題を解決するために、2つの方法を示し、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を使用する方法を見つけました。

関連する問題