IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

R Discussion :

Rcpp. Question sur la rapidité du passage par référence


Sujet :

R

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2016
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2016
    Messages : 10
    Par défaut 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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  2. #2
    Membre très actif Avatar de Matthieu76
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mars 2013
    Messages
    568
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2013
    Messages : 568
    Par défaut
    J'avoue que là c'est bizarre

    Quelle était la taille de ton vecteur ? (essaye avec un vecteur très très grand pour voir)
    Après c'est peut-être avec la fonction microbenchmark que ça déconne.

    PS : Tu n'es pas obligé de passer par le C++ pour faire une boucle, ça se fait très bien en R :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for(i in 1:10) { 
     
    print(i) 
     
    }

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2016
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2016
    Messages : 10
    Par défaut 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

Discussions similaires

  1. Question sur le passage par référence
    Par Baubeau Cédric dans le forum Débuter
    Réponses: 2
    Dernier message: 28/01/2010, 10h14
  2. Question sur la rapidité d'une macro
    Par johannj dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 26/06/2009, 16h29
  3. POO: Passage par référence, question technique.
    Par FMaz dans le forum Langage
    Réponses: 7
    Dernier message: 07/05/2009, 20h04
  4. Réponses: 7
    Dernier message: 08/03/2007, 13h05
  5. Question sur la rapidité d'une requete
    Par barok dans le forum Requêtes
    Réponses: 3
    Dernier message: 12/07/2006, 09h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo