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

Python Discussion :

Appliquer une permutation sur les éléments d'une matrice 2D [Python 3.X]


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 3
    Par défaut Appliquer une permutation sur les éléments d'une matrice 2D
    Bonjour,
    Je cherche à appliquer une permutation de range(N) sur les éléments une matrice 2D (numpy.array) constituée de nombres entiers entre 0 et N-1.

    Je fais ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    # appliquer une permutation
    def apply_permut(A,perm):
        B=np.empty_like(A) # A est une matrice 2D d'entiers dans range(N)
        l,c = A.shape 
        for i in range(l):
            for j in range(c):
                B[i,j]=perm[A[i,j]] # perm est une permutation de range(N)
        return B
    Mais c'est très lent...
    Y a-t-il plus rapide et plus "python" pour faire ceci ?
    Merci de votre aide .
    Ergatif

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 739
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 739
    Par défaut
    Salut,

    Citation Envoyé par ergatif Voir le message
    Y a-t-il plus rapide et plus "python" pour faire ceci ?
    Pourquoi ne pas utiliser numpy.random.permutation?

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 3
    Par défaut
    Merci de cette réponse, hélas, non ça ne fait pas la même chose np.random.permutation permute les cellules de la matrice. Ce que je veux c'est que chaque 0 soit remplacé par perm[0], chaque 1 par perm[1], etc. Donc appliquer une permutation sur les valeurs pas sur les positions

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 739
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 739
    Par défaut
    Citation Envoyé par ergatif Voir le message
    Ce que je veux c'est que chaque 0 soit remplacé par perm[0], chaque 1 par perm[1], etc. Donc appliquer une permutation sur les valeurs pas sur les positions
    Avec numpy, cela s'écrit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    A[A == 0] = perm[0]
    A[A == 1] = perm[1]
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 3
    Par défaut
    Merci beaucoup !
    Effectivement si je fais ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    # appliquer une permutation
    def apply_permutation(A,perm,N):
        B=np.empty_like(A) # A est une matrice NxN d'entiers dans range(N)
        for i in range(N):
                B[A[:]==i]=perm[i] # perm est une permutation de range(N)
        return B
    le temps d'exécution est divisé par 2
    Je ne pense pas que je puisse me passer d'au moins un boucle "for", donc il y a des chances que ce soit optimal.
    Bon week-end !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Pointeur sur les éléments d'une structure
    Par Marley_T dans le forum C
    Réponses: 16
    Dernier message: 05/05/2008, 23h31
  2. Réponses: 2
    Dernier message: 12/02/2008, 10h51
  3. Travail sur les éléments d'une matrice.
    Par Jefeh dans le forum MATLAB
    Réponses: 6
    Dernier message: 12/11/2007, 15h10
  4. Réponses: 1
    Dernier message: 09/05/2007, 15h58
  5. Appliquer un style à tous les éléments d'une table
    Par licorne dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 02/01/2007, 14h31

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