[Rcpp-devel] How to increase the coding efficiency
Romain Francois
romain at r-enthusiasts.com
Tue Dec 4 20:19:11 CET 2012
You are calling back to R using Function. This is expensive.
What is ker ? Can you implement it in C++. This is a wild guess, but
that is I think where the bottleneck is.
Romain
Le 04/12/12 20:14, Honglang Wang a écrit :
> Dear All,
> I have tried out the first example by using RcppArmadillo, but I am not
> sure whether the code is efficient or not. And I did the comparison of
> the computation time.
>
> 1) R code using for loop in R: 87.22s
> 2) R code using apply: 77.86s
> 3) RcppArmadillo by using for loop in C++: 53.102s
> 4) RcppArmadillo together with apply in R: 47.310s
>
> It is kind of not so big increase. I am wondering whether I used an
> inefficient way for the C++ coding:
>
>
> // [[Rcpp::depends(RcppArmadillo)]]
>
> #include <RcppArmadillo.h>
>
> using namespace Rcpp;
>
> // [[Rcpp::export]]
> List betahat(Function ker, double t0, NumericMatrix Xr, NumericMatrix
> yr, NumericVector tr, double h, int m) {
> int n = Xr.nrow(), p = Xr.ncol();
> arma::mat X(Xr.begin(), n, p, false);
> arma::mat y(yr.begin(), n, 1, false);
> arma::colvec t(tr.begin(), tr.size(), false);
> arma::mat T = X;
> T.each_col() %= (t-t0)/h;
> arma::mat D = arma::join_rows(X,T);
> arma::vec kk =as<arma::vec>(ker(tr-t0,h));
> arma::mat W = (arma::diagmat(kk))/m;
> arma::mat Inv = arma::trans(D)*W*D;
> arma::vec betahat = arma::inv(Inv)*arma::trans(D)*W*y;
> arma::colvec betahat0(betahat.begin(),betahat.size()/2,false);
> return List::create(Named("betahat") = betahat0);
> }
>
> Anyone could help me with how to increase the efficiency of the coding?
> Thanks.
>
>
>
> Best wishes!
> Honglang Wang
> Office C402 Wells Hall
> Department of Statistics and Probability
> Michigan State University
> 1579 I Spartan Village, East Lansing, MI 48823
> wangho16 at msu.edu <mailto:wangho16 at msu.edu>
--
Romain Francois
Professional R Enthusiast
+33(0) 6 28 91 30 30
R Graph Gallery: http://gallery.r-enthusiasts.com
`- http://bit.ly/SweN1Z : SuperStorm Sandy
blog: http://romainfrancois.blog.free.fr
|- http://bit.ly/RE6sYH : OOP with Rcpp modules
`- http://bit.ly/Thw7IK : Rcpp modules more flexible
More information about the Rcpp-devel
mailing list