gpt4 book ai didi

r - Rcpp Armadillo 中的样本

转载 作者:行者123 更新时间:2023-12-04 01:46:49 29 4
gpt4 key购买 nike

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

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

任何帮助将不胜感激:)

#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::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在这种情况下。同样有趣的是,R 3.6 将采用新的采样方法,以消除当前方法中存在的偏差。

关于r - Rcpp Armadillo 中的样本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54951791/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com