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 |エラー:'尖度'はこのスコープで宣言されていません|"

4

1 に答える 1

1

のヘッダーを含めていなかったものについては、次のkurtosisとおりです。

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

したとしても、ストレートでは機能しないことがわかりますが、vectorおそらくやりたいことは、accumulator_setおよびその他のヘッダーも使用することです。

を使用した最小限の例を次にaccumulator_set示します。これは、問題を解決する 2 つの方法を示しています。

#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 に答える