首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rcpp Armadillo中的示例

Rcpp Armadillo中的示例
EN

Stack Overflow用户
提问于 2019-03-02 04:24:34
回答 1查看 858关注 0票数 3

我目前正在努力使用RcppArmadillo中提供的sample()命令。当我尝试运行下面的代码时,我得到了错误no matching function for call to sample,并且我已经在前面添加了额外的Rcpp::名称空间,因为这在另一个post中工作得很好。

我还尝试了其他几个容器类,但我总是遇到这个错误。下面是一些产生错误的代码。

任何帮助都将不胜感激:)

代码语言:javascript
复制
#include <RcppArmadillo.h>
// [[Rcpp::depends(RcppArmadillo)]]
#include <RcppArmadilloExtensions/sample.h>
using namespace Rcpp;

// [[Rcpp::export]]
NumericMatrix example(arma::mat fprob,
                      int K) {
  int t = fprob.n_rows;
  IntegerVector choice_set = seq_len(K);
  arma::mat states(t,1); states.fill(0);
  arma::rowvec p0(K);
  arma::rowvec alph(K);
  double fit;

  p0 = fprob.row(t-1);
  fit = accu(p0);
  alph = p0/fit;
  states(t-1,1) = Rcpp::RcppArmadillo::sample(choice_set, 1, false, alph)[0];

  return wrap(states);
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-02 04:35:12

下面是标题中该函数的定义:

代码语言:javascript
复制
    // Enables supplying an arma probability
    template <class T> 
    T sample(const T &x, const int size, const bool replace, arma::vec &prob_){
      return sample_main(x, size, replace, prob_);
    }

请注意,它需要一个arma::vec == arma::colvec,而您提供的是一个arma::rowvec。因此,如果您将p0alph更改为arma::vec,它应该可以工作。未测试,因为缺少样本数据...

顺便说一句,同时还有一个Rcpp:::sample()功能,如果你不是真的需要Armadillo来完成其他任务。

关于@JosephWood在评论中提出的性能问题:我的印象是Rcpp::sample()Rcpp::RcppArmadillo::sample()都是基于do_sample()的。因此,在大多数情况下,它们应该非常相似,但我没有对它们进行基准测试。R在不替换较大数字的情况下进行未加权采样的更高性能来自hash algorithm,在这种情况下是selected at R level。有趣的是,R3.6将有一种新的采样方法,以消除当前方法中存在的偏差。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54951791

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档