c – boost :: weighted_median和eigen :: vectorXf –newbie
发布时间:2020-12-16 07:31:14 所属栏目:百科 来源:网络整理
导读:我想得到一个未排序的变量的weighted_median 长度,特征c vectorXf对象.看来我可以使用提升 boost的统计累加器的weighted_median函数 库有效地做到了[?]. 从本质上讲,我正在尝试做一些与所做的非常相似的事情 here.我不确定boost的累加器是否是正确的框架 为
我想得到一个未排序的变量的weighted_median
长度,特征c vectorXf对象.看来我可以使用提升 boost的统计累加器的weighted_median函数 库有效地做到了[?]. 从本质上讲,我正在尝试做一些与所做的非常相似的事情 我现在的问题是,是否有办法取代 #include <Eigen/Dense> #include <iostream> #include <boost/accumulators/accumulators.hpp> #include <boost/accumulators/statistics/stats.hpp> #include <boost/accumulators/statistics/median.hpp> #include <boost/accumulators/statistics/weighted_median.hpp> using namespace boost::accumulators; using namespace Eigen; int main(){ accumulator_set<float,stats<tag::median > > acc1; accumulator_set<float,stats<tag::median >,int> acc2; VectorXi rw=VectorXi::Random(100); VectorXf rn=VectorXf::Random(100); rw=rw.cwiseAbs(); for(int i=0;i<100;i++){ acc1(rn(i)); acc2(rn(i),weight=rw(i)); } std::cout << " Median: " << median(acc1) << std::endl; std::cout << "Weighted Median: " << median(acc2) << std::endl; return 0; } 解决方法
你要做的是使用boost accumulators在某种容器中累积值.你会注意到甚至传递std :: vector< float>累加器将无法正常工作.累积器根本不适合这种方式使用.当然,你可以使用累加器来累积向量值或矩阵值 – 但这不是你在这里所追求的.
您可以使用std :: for_each来摆脱显式循环,这就是它: // median using boost::bind; using boost::ref; std::for_each(rn.data(),rn.data()+rn.rows(),bind<void>( ref(acc1),_1 ) ); 您链接到的question在最新版本的Eigen3中不再相关.那里给出的代码运行得很好并产生正确的结果. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- YH1:Oracle Data Guard知识库
- ruby – 指定setter方法的默认值
- ruby – PostsController中的NoMethodError #create
- xe-ajax-mock 前端虚拟服务
- C#通过oledb访问access数据库的方法
- ruby-on-rails – 使用carrierwave获取gif中的第一张图像
- 这是语义错误还是语法错误?
- PostgreSQL:提高pg_dump,pg_restore性能
- ios – 在Xcode 10中为Enterprise分发时代码签名框架失败
- Ajax本地跨域问题 Cross origin requests are only support