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 :

Transposée d'une matrice


Sujet :

Python

  1. #1
    Membre très actif Avatar de Kurodiam
    Inscrit en
    Décembre 2013
    Messages
    208
    Détails du profil
    Informations forums :
    Inscription : Décembre 2013
    Messages : 208
    Par défaut Transposée d'une matrice
    Bonjour,

    J'ai utilisé pour créer la transposée de cette expression une liste compréhension mais j'ai trouvé tellement facilement cette transposée , que je n'arrive pas maintenant à imaginer ou à coder une fonction qui passe en argument passé la matrice Z Les lignes deviennent des colonnes

    Qu'est-ce que les lignes et les colonnes ont en commun ?Comment utiliser 2 boucles for pour transposer cette matrice ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    >>> matrice = [
                     [1,2,3],
                     [4,5,6],
           ]
    >>> Z = [] 
    >>> for ligne in range(3): 
                        M.append([row[ligne] for row in matrice])
    >>> Z
     
    [[1, 4], [2, 5], [3, 6]]
    Soit A une matrice de dimension m lignes et n colonnes.
    La matrice A' transposée de A, notée A' = AT, est la matrice ayant n lignes et m colonnes et dont les éléménts a'ij sont tels que :
    a'ij = aji
    (ce qui, dit plus simplement, s'énnonce : on remplace les lignes par les colonnes...)

    Exemple :
    A = || 1 5 -2 || || 1 2 ||
    || 2 0 1 || AT = || 5 0 ||
    || -2 1 ||

    Mais bon , çà rien à voir avec une matrice carré , où m = n .

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 695
    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 695
    Par défaut
    Salut,

    Pour "transposer", Python dispose du builtins "zip"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    >>> M = [
    ... [1,2,3],
    ... [4,5,6],
    ... ]
    >>> print(list(zip(*M)))
    [(1, 4), (2, 5), (3, 6)]
    Mais quelle est la question?
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre très actif Avatar de Kurodiam
    Inscrit en
    Décembre 2013
    Messages
    208
    Détails du profil
    Informations forums :
    Inscription : Décembre 2013
    Messages : 208
    Par défaut
    Ta réponse est surement juste , mais buildin zip n'est pas de mon niveau (même la fonction list je l'ai pas encore vu mais j'ai observé cette technique que tu as montré ).

    Ma question :

    Comment utiliser 2 boucles for pour transposer cette matrice ?C'est vrai , que j'ai trouvé la réponse avec une liste compréhension , mais j'ai comme zappé le raisonnement simple ...

  4. #4
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 049
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 049
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    >>> M = [[1, 2, 3], [4, 5, 6]]
    >>> res = []
    >>> for i in range(3):
    ...     t = []
    ...     for line in M:
    ...         t.append(line[i])
    ...     res.append(t)
    ... 
    >>> res
    [[1, 4], [2, 5], [3, 6]]
    ?

    EDIT:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    >>> list(map(lambda x, y:(x, y), *M))
    [(1, 4), (2, 5), (3, 6)]

  5. #5
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 695
    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 695
    Par défaut
    Citation Envoyé par Kurodiam Voir le message
    Comment utiliser 2 boucles for pour transposer cette matrice ?C'est vrai , que j'ai trouvé la réponse avec une liste compréhension , mais j'ai comme zappé le raisonnement simple ...
    Si vous ne montrez pas ce que vous essayez de faire et les difficultés que vous rencontrez, je ne vois pas ce que vous allez bien pouvoir apprendre en recopiant la solution.

    De toutes façons, la musique devrait ressembler a:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    >>> def transpose(m, r, c):
    ....      n = matrice(c, r):
    ....      for i in range(c):
    ....           for j in range(r):
    ....                n[j][i] = m[i][j]
    ....      return n
    >>>
    Je ne vois pas ce qu'on peut faire "plus proche" de la définition d'une transposition pour assurer que ce qu'on fait "a la mimine" réponde a ce qu'on attend.
    C'est ce qui rend Python sympa et simple a apprendre et a utiliser

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

  6. #6
    Membre très actif Avatar de Kurodiam
    Inscrit en
    Décembre 2013
    Messages
    208
    Détails du profil
    Informations forums :
    Inscription : Décembre 2013
    Messages : 208
    Par défaut
    J'ai déjà répondu à l'exercice (pour ton info ) .J'essaye d'avoir des indices qui peuvent m'aider à comprendre mes erreurs de raisonnement , ce qui revient c'est le concept de généralisation .Pour un débutant , la musique s'apprend Il y'a une sorte de jonglage à faire ....D'ailleurs , le copiage n'apprend rien mais à dépendre d'autrui !Justement , le but est d'appendre à avoir une certaine autonomie dans le raisonnement et même d'inventer .Au début , j'imaginais python comme une sorte de machine hyper complexe

    Par exemple , si j'ai bien compris ton code , tu as mis 3 arguments :
    ensuite tu as précisé quelle matrice , tu vas prendre avec la colonne et ligne correspondante , aprés c'est 'pour x prenant le numéro de la ligne ' , mais c'est surtout ce bout de code qui est primordial et qui résout tout :les lignes deviennent des colonnes et le code obtenu est bien réfléchi.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for j in range(r):
    ....                    n[j][i] = m[i][j]
    Merci pour ton aide ! Pas facile de devenir un bon programmeur

  7. #7
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 695
    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 695
    Par défaut
    Salut,
    Citation Envoyé par Kurodiam Voir le message
    Pas facile de devenir un bon programmeur
    Faire des gammes et apprendre le solfège.

    Jouez avec ce bout de code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    >>> def transpose(m, r, c):
    ....      n = matrice(c, r):
    ....      for i in range(c):
    ....           for j in range(r):
    ....                n[j, i] = m[i, j]
    ....      return n
    >>>
    J'ai juste remplace n[j][i] = m[i][j] par n[j, i] = m[i, j].
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  8. #8
    Membre très actif
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2014
    Messages
    208
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2014
    Messages : 208
    Par défaut
    bonjour,

    en appelle cette fonction

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    def transpose(m, r, c):
    ...       n = matrice(c, r)
    ...       for i in range(c):
    ...            for j in range(r):
    ...                 n[j, i] = m[i, j]
    ...       return n

    transpose(1, 2, 3)???

    car sa renvois

    Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
    File "<stdin>", line 5, in transpose
    TypeError: 'int' object has no attribute '__getitem__'

  9. #9
    Membre très actif
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2014
    Messages
    208
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2014
    Messages : 208
    Par défaut
    bonjour,

    c'est quoi le role de m dans cette fonction ??

  10. #10
    Membre très actif Avatar de Kurodiam
    Inscrit en
    Décembre 2013
    Messages
    208
    Détails du profil
    Informations forums :
    Inscription : Décembre 2013
    Messages : 208
    Par défaut
    As-tu testé le code ?
    Le m est un argument de la fonction comme r et c , mais sa fonction change un peu après , c'est comme une sorte de variable locale.Le but est d'extraire la transposée d'une ligne en colonne (et même vice-versa) .
    Mais si tu ne comprends pas ce code , tu dois créer un nouveau

  11. #11
    Membre très actif
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2014
    Messages
    208
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2014
    Messages : 208
    Par défaut
    Citation Envoyé par Kurodiam Voir le message
    As-tu testé le code ?
    Le m est un argument de la fonction comme r et c , mais sa fonction change un peu après , c'est comme une sorte de variable locale.Le but est d'extraire la transposée d'une ligne en colonne (et même vice-versa) .
    Mais si tu ne comprends pas ce code , tu dois créer un nouveau

    tkt pas je suis pas ici pour copier le code j'utilise que mes propre code c'étais pour savoir c'est quoi le role exact car il marche pas et j'ai un soucis a trouver la réponse a ce code

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

Discussions similaires

  1. Transposée d'une matrice
    Par lucaordi dans le forum Mathématiques - Sciences
    Réponses: 4
    Dernier message: 22/07/2008, 18h08
  2. [Débutant] Transposée d'une matrice
    Par swayly dans le forum Pascal
    Réponses: 9
    Dernier message: 01/05/2008, 18h40
  3. Réponses: 2
    Dernier message: 21/02/2008, 09h49
  4. Transposée d'une matrice
    Par zied212 dans le forum Cobol
    Réponses: 17
    Dernier message: 03/12/2007, 16h54
  5. Transposée d'une matrice
    Par Poseidon62 dans le forum Ada
    Réponses: 1
    Dernier message: 07/04/2007, 17h46

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