2013-03-05 26 views
6

Veri bir vektörüm var ve veri kümesinin kurtosunu bulmak istiyorum. Ben Boost ile bunu yapmak istedim ve burada şimdiye kadar (değil derlenebilir) ne var:Boost ile veri kümesi için basıklık bulma

#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; 
} 

neden değil bu iş? Derleyicim bana hatayı veriyor: "[...] \ main.cpp | 28 | error: 'kurtosis' bu kapsamda açıklanmadı."

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

bunu bir düz vector çalışmaz gördüğüm gibi, olsa bile, ne muhtemelen yapmak istiyorum bir accumulator_set kullanmak ve: Eğer kurtosis başlık dahil değildi Birincisi

+3

Eğer derleme yapmıyorsa, derleyici hatasını gönderin – mathematician1975

+1

İşlev başka bir ad alanında, 'boost :: some :: namespace :: kurtosis (a)' kullanmanız gerekir. "Bazı :: namespace" ifadelerini, gerçek (bilmediğim) ad alanıyla değiştirin. –

+1

Sorumluluk reddi: Sorun alanım hakkında ne söylediğimin kesinlikle emin olmak için yeterli bilgim yok. Tahminimce içindeki algoritmalar sadece [parametreli önceden tanımlanmış dağılımlar] ile çalışmaktadır (http://www.boost.org/libs/math/doc/sf_and_dist/html/math_toolkit/dist/dist_ref /dists.html). Veri kümelerini kullanan bir alternatif [Boost.Accumulators] (http://www.boost.org/libs/accumulators) olabilir. [İşte] (http://liveworkspace.org/code/2cDjQ9$0) bir örnektir. –

cevap

1

daha fazla başlık da var. İşte

accumulator_set kullanarak minimal örnektir, bu sorunu çözmek için bir iki yöntem gösterilmektedir: Burada

#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 bağlantısıdır. Bu kılavuzda bazı güzel örnekler var.

Bu önceki thread numaralı telefonun vector numaralı kullanım yolunu bulmasına rağmen bir yöntem bulunamamıştır, ancak bu işlem işe yaramadı.

İlgili konular