我有一个数据向量,我想找到数据集的峰度.我想用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;
}
Run Code Online (Sandbox Code Playgroud)
为什么这不起作用?我的编译器给了我错误:"[...]\main.cpp | 28 |错误:'kurtosis'未在此范围内声明|"
对于其中之一,您没有包含以下标题kurtosis:
#include <boost/accumulators/statistics/kurtosis.hpp>
Run Code Online (Sandbox Code Playgroud)
即使您这样做了,正如您所看到的,它不适用于 Straight vector,您可能想做的是使用 anaccumulator_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 ;
}
Run Code Online (Sandbox Code Playgroud)
Accumulators Framework 这是用户指南的链接。本指南有一些很好的例子。
上一个线程找到了一种使用方法vector,尽管它根本不直接,而且我无法让它工作。
| 归档时间: |
|
| 查看次数: |
1016 次 |
| 最近记录: |