Rcppを初めて使用し、そのアプリケーションを探索しています。特に、私は一部previous answer上に構築され、以下の機能をスピードアップしようとしています:Rcpp - forとwhileループ内でランダムノーマル描画を高速化します。
code = 'NumericVector RcppFun(int N){
NumericVector out(N);
for (int i = 0; i < N; ++i) {
double V = 0;
while(V > -1e04 && V < 1e04) {
V += R::rnorm(10, 100);
}
out[i] = V;
}
return out;
}'
cppFunction(code)
system.time(RcppFun(1e05))
コードは、そのRの対応よりもかなり高速ですが、それでも私のコンピュータ上で実行するために、いくつかの秒を要します。この関数を何回か呼び出す必要があることを考えれば、私はその性能をさらに改善できるかどうか疑問に思っていました。
whileループ内の論理ステートメントを変更したり、RNG関数を変更すると、何らかの形で関数が高速化すると考えられていましたが、どうやって解決できなかったのでしょうか。
ありがとうございました!
EDIT:rbenchmark ::ベンチマーク推計に基づき
#include <Rcpp.h>
// [[Rcpp::depends(RcppZiggurat)]]
#include <Ziggurat.h>
using namespace Rcpp;
static Ziggurat::Ziggurat::Ziggurat zigg;
// [[Rcpp::export]]
NumericVector ZiggFun(int N){
NumericVector out(N);
for (int i = 0; i < N; ++i) {
double V = 0;
while(V > -1e04 && V < 1e04) {
V += 10 + zigg.norm()*100;
}
out[i] = V;
}
return out;
}
は、新しいコードは今より7さ:だけ完全を期すため、ここで私はディルクの非常に役立つ提案をもとにC++で書いたコードです倍速く!あなたがより速くRNGのためRcppZigguratを使用することができます