簡體   English   中英

Rcpp Armadillo中的樣本

[英]sample in Rcpp Armadillo

我目前正與提供的樣本()命令struggeling RcppArmadillo 當我嘗試運行下面的代碼時,出現錯誤, no matching function for call to sample並且我已經在前面添加了額外的Rcpp::名稱空間,因為這在另一篇文章中很好地解決了。

我也嘗試了其他幾個容器類,但是我總是被這個錯誤困擾。 下面是一些代碼,它會產生錯誤。

任何幫助將不勝感激 :)

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

這里從頭開始定義該函數:

    // 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::rowvec ,它期望arma::vec == arma::colvec arma::rowvec 因此,如果將p0alph更改為arma::vec它應該可以工作。 由於缺少樣本數據而未經測試...

順便說一句,同時還有Rcpp:::sample()函數,以防您真的不需要Armadillo來完成其他任務。

關於@JosephWood在評論中提出的性能問題:我的印象是Rcpp::sample()Rcpp::RcppArmadillo::sample()都基於do_sample() 因此,它們在大多數情況下應該非常相似,但我尚未對其進行基准測試。 R在未加權采樣的情況下具有更高的性能,而無需替換較大的數字,這得益於在這種情況下在R級別選擇哈希算法 還有趣的是,R 3.6將具有一種新的采樣方法,以消除當前方法中存在的偏差。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM