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 :

Accélérer une boucle imbriquée


Sujet :

R

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 28
    Par défaut Accélérer une boucle imbriquée
    Bonjour,

    Je me retrouve à devoir écrire cette boucle très inefficace :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    for (i in 1:n) {
        for (j in 1:n) {
            if (A[i,j]>0) W_nc[nums[i],nums[j]] = W[i,j]
        }
    }
    où "nums" est un vecteur de taille n, contenant des indices dans [1,nc] correspondant à i et j dans [1,n]. Les autres éléments de W_nc valent 0.

    Y-a-t'il un moyen d'écrire quelque chose comme "for ( (i,j) in all_positive_pairs(A) ) do W_nc[nums[i],nums[j]] = W[i,j]" ? Ou faut-il le coder en C ? (Auquel cas il faudra que j'apprenne à le faire, je code en C/C++ et un peu en R, mais n'ai pas encore mélangé les deux :-) )

    Merci d'avance !

  2. #2
    Membre confirmé
    Inscrit en
    Juin 2009
    Messages
    88
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 88
    Par défaut
    A mon avis ce qui bloque c'est le if
    Tu parcours A élément après élément et il y en a n^2.
    Il doit être possible de gagner du temps en testant
    Cela revient à tester d'un coups tout les éléments du vecteur.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    M=matrix(1:9,nrow=3)
         [,1] [,2] [,3]
    [1,]    1    4    7
    [2,]    2    5    8
    [3,]    3    6    9
     
    M[,1]>4
    [1] FALSE FALSE FALSE
    et pour les plus pressés
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    > M>4
          [,1]  [,2] [,3]
    [1,] FALSE FALSE TRUE
    [2,] FALSE  TRUE TRUE
    [3,] FALSE  TRUE TRUE
    Cdt

Discussions similaires

  1. Réponses: 4
    Dernier message: 21/01/2013, 17h51
  2. [Débutant] soucis avec la vectorisation d'une boucle imbriquée
    Par Imène_23 dans le forum MATLAB
    Réponses: 10
    Dernier message: 26/07/2011, 18h26
  3. [XL-2003] Aide pour faire une boucle imbriquée
    Par Victor21 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 02/02/2011, 21h25
  4. selection de 2-uplet dans une boucle imbriquée
    Par nostress dans le forum Macro
    Réponses: 2
    Dernier message: 16/11/2009, 15h14
  5. afficher les données d'une Boucle imbriquée
    Par doria_serine dans le forum BIRT
    Réponses: 8
    Dernier message: 20/08/2009, 19h11

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