Я хочу сгенерировать случайный вектор, все элементы вектора взяты из бета-версии. Так как у броненосца такой функции нет. Мое текущее решение - использовать функцию 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
Можно ли сократить временные затраты для выборки из бета-распределения?