[英]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
。 因此,如果將p0
和alph
更改為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.