c++ - 使用 boost 查找数据集的峰度

标签 c++ boost

我有一个数据 vector ,我想找出数据集的峰度。我想用 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|error: 'kurtosis' was not declared in this scope|”

最佳答案

对于一个你没有包括 kurtosis 的标题:

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

即使您这样做了,正如您所见,它不适用于直接的 vector,您可能想要做的是使用 accumulator_set 和更多 header 。

这是一个使用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 ;
}

这是指向累加器框架的链接 User's Guide .本指南有一些很好的例子。

上一个thread找到了一种使用 vector 的方法,尽管它根本不是直截了当的,而且我无法让它工作。

关于c++ - 使用 boost 查找数据集的峰度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15223476/

相关文章:

c++ - 如何通过 QtConcurrent 调用带参数的函数

c++ - 如何获得 boost 图中顶点的最大级别(深度)

c++ - 如何将 BGL 有向图用作无向图(用于布局算法)?

c++ - 在 boost::graph 中对 EdgeList 进行排序

c++ - boost .Asio : Writing a SSL Server/Client Too many file types

c++ - 没有上下文类型信息的重载函数

c++ - 将 'group by/count' std::vector<std::u16string> 快速转换为 std::map<u16string, int>

c++ - 编译器错误帮助(E2209 无法打开包含文件)

c++ - Windows 与 Linux - C++ 线程池内存使用情况

c++ - static_cast_tag() 替代最新的 boost 版本