| for (i = 0; i < numObjects; i++) {
| for (j = 0; j < numCodes; j++) {
| dist = 0;
| for (k = 0; k < numVars; k++) {
| if (!ISNAN(data[i * numVars + k])) {
| tmp = data[i * numVars + k] - codes[j * numVars + k];
Why not drop data and codes and use sData1(i,k) - sData2(j,k) ?
Or better yet, just use the original code with NumericMatrix: sData1[i * numVars + k] does the right thing. I don't get any timing difference based on this change. Using Rcpp sugar (https://cran.r-project.org/package=Rcpp/vignettes/Rcpp-sugar.pdf), and moving the call outside the loop, appears to do the right thing. ## modified example ## see edits here: https://github.com/helmingstay/rcpp-timings/blob/master/diff/rcppdist.cpp#L24 git clone https://github.com/helmingstay/rcpp-timings cd rcpp-timings/diff R --vanilla < glue.R best, Christian
That still doesn't explain the slowdowns though. Could you prepare a _complete_ yet minimal example along with mock data? Dirk -- http://dirk.eddelbuettel.com | @eddelbuettel | edd at debian.org
A man, a plan, a cat, a ham, a yak, a yam, a hat, a canal ? Panama! http://www.x14n.org