小编use*_*870的帖子

Rcpp函数比同样的R函数更低

我一直在编写一个R函数来计算某些分布的积分,见下面的代码.

EVofPsi = function(psi, probabilityMeasure, eps=0.01, ...){

distFun = function(u){
 probabilityMeasure(u, ...)
}
xx = yy = seq(0,1,length=1/eps+1)
summand=0

for(i in 1:(length(xx)-1)){
  for(j in 1:(length(yy)-1)){
    signPlus = distFun(c(xx[i+1],yy[j+1]))+distFun(c(xx[i],yy[j]))
    signMinus = distFun(c(xx[i+1],yy[j]))+distFun(c(xx[i],yy[j+1]))
    summand = c(summand, psi(c(xx[i],yy[j]))*(signPlus-signMinus))
  }
}
sum(summand)
}
Run Code Online (Sandbox Code Playgroud)

它工作正常,但它很慢.通常会听到用C++等编译语言对函数进行重新编程会加快速度,特别是因为上面的R代码涉及双循环.我也是,使用Rcpp:

#include <Rcpp.h>
using namespace Rcpp;

// [[Rcpp::export]]
double EVofPsiCPP(Function distFun, Function psi, int n, double eps) {

  NumericVector xx(n+1);
  NumericVector yy(n+1);
  xx[0] = 0;
  yy[0] = 0;

  // discretize [0,1]^2
  for(int i = 1; i < n+1; i++) {
      xx[i] …
Run Code Online (Sandbox Code Playgroud)

c++ performance r rcpp

4
推荐指数
1
解决办法
1304
查看次数

标签 统计

c++ ×1

performance ×1

r ×1

rcpp ×1