[Rcpp-devel] Indexing vector with x(i) and x[i] gives remarkable difference in computing time
Søren Højsgaard
sorenh at math.aau.dk
Thu Nov 27 13:22:18 CET 2014
Dear all,
By "accident" I noticed that indexing with x(i) and x[i] gives remarkable difference in computing time. For example:
library(Rcpp)
cppFunction('
IntegerVector insert1 (int n){
IntegerVector z(n);
for (int i=0; i<n; ++i) z(i) = i; // NOTICE: using ()
return z;
}')
cppFunction('
IntegerVector insert2 (int n){
IntegerVector z(n);
for (int i=0; i<n; ++i) z[i] = i; // NOTICE: using []
return z;
}')
Both functions "work":
n <- 10; insert1(n); insert2(n)
[1] 0 1 2 3 4 5 6 7 8 9
[1] 0 1 2 3 4 5 6 7 8 9
But notice this difference in computing time:
n <- 50000
microbenchmark::microbenchmark( insert1(n), insert2(n) )
Unit: microseconds
expr min lq mean median uq max neval cld
insert1(n) 391.154 406.5500 416.9694 407.5005 421.1855 731.752 100 b
insert2(n) 149.771 156.8045 189.9401 157.3745 163.0760 1204.635 100 a
So using z(i) is more than twice as slow as using z[i].
This prompts me to ask:
1) Why is that?
2) In the vignettes it is always [i] that are used for vectors. But why is it that (i,j) is then used for matrices. Wouldn't it be preferable if one could use both [] and () for indexing in both cases (and with the same speed) - or are there deeper reasons for this?
Best regards
Søren
More information about the Rcpp-devel
mailing list