0

我想生成一个随机向量,向量中的所有元素都来自 beta 分布。由于犰狳没有这样的功能。我目前的解决方案是使用 rbeta 函数(ftest1 & ftest2)。但与犰狳中的伽马函数(ftest3)相比,这似乎非常耗时。代码如下

// [[Rcpp::export]]
NumericVector ftest1(int N){
    NumericVector sam=Rcpp::rbeta(N,2.0,1.0);
    return(sam);
}
// [[Rcpp::export]] 
arma::vec ftest2(int N){
   arma::vec sam(N);
   for(int i=0;}i<N;i++){
   sam(i)=R::rbeta(2.0,1.0);
  }
return(sam);
}

// [[Rcpp::export]]
arma::vec ftest3(int N){
   arma::vec sam=arma::randg<vec>(N,distr_param(2.0,1.0));
   return(sam);}

基准如下

library(microbenchmark)
N=1e4
microbenchmark(ftest1(N),ftest2(N),ftest3(N))
Unit: microseconds
  expr      min        lq     mean   median        uq      max neval
 ftest1(N) 1387.828 1405.5515 1433.774 1410.711 1420.2070 2841.565   100
 ftest2(N) 1413.557 1426.2355 1449.731 1433.162 1440.3870 2310.573   100
 ftest3(N)  166.255  177.0765  291.415  178.788  180.9045 8281.423   100

是否可以减少从 beta 分布中采样的时间成本?

4

0 回答 0