Rcpp. Question sur la rapidité du passage par référence
Bonjour
J'ai besoin de faire une fonction qui fait des boucles donc j'utilise Rcpp.
On m'a toujours dit de passer les objets par references.
Or dans les tutoriels que j'ai vu, ils n'en parlent pas.
Je crée 2 fonctions simples:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| // [[Rcpp::export]]
double meanC1(NumericVector &x) {
int n = x.size();
double total = 0;
for(int i = 0; i < n; ++i) {
total += x[i];
}
return total / n;
}
// [[Rcpp::export]]
double meanC2(NumericVector x) {
int n = x.size();
double total = 0;
for(int i = 0; i < n; ++i) {
total += x[i];
}
return total / n;
} |
Et j’utilise
microbenchmark(meanC1(x), meanC2(x)) pour me fournir des statistiques sur la vitesse d’exécution:
Code:
1 2 3 4
| Unit: milliseconds
expr min lq mean median uq max neval cld
meanC1(x) 176.4979 176.6425 178.0519 177.0741 178.8011 188.5153 100 b
meanC2(x) 176.3904 176.5870 177.4585 176.8858 177.6912 185.0183 100 a |
Surprise, la version avec une référence est globalement plus lente que sans références.
Est ce que quelqu'un serait e dire pourquoi?
Merci d'avance de votre aide.
suite Question sur la rapidité du passage par référence
Bonjour.
On m'a expliqué entre temps que le type vector de R en c++ était en fait déjà comme un pointeur vers un autre vector. Donc quelle que soit le nombre de nombre dans le vecteur, le passer en reférence ou pas ne change rien.
A propos des boucle dans R, mes propos étaient mal formulé. Je voulais juste dire que c'était plus efficace de faire ça avec un langage compilé. Merci quand même de m'avoir rappeler comment faire des boucles en R :)
Cordialement