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

Calcul scientifique Python Discussion :

Transposition d'une matrice avec Python : diférence entre deux programmes


Sujet :

Calcul scientifique Python

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2019
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2019
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Transposition d'une matrice avec Python : diférence entre deux programmes
    Bonjour,
    Je sollicite une aide car je n'ai vraiment pas trouvé de réponse après de longues recherches au fait que deux programmes sur Python ayant pour objectif la transposition d'une matrice donnent des résultats différents : l'un fonctionne parfaitement (le premier) et renvoie bien la matrice transposée à celle qui en entrée de la fonction ; l'autre programme renvoie une matrice qui n'est pas la transposée de celle en entrée de la fonction. Voici les deux programmes : (les Fichiers programmes sont en pièces jointes).

    Premier programme (celui qui fonctionne parfaitement et renvoie bien la matrice transposée) :
    -------------------------------------------------------------------------------------------------------------
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    def transpose(B): #Entree : une matrice ; Sortie: la matrice transposée de celle en entrée.
        a=range(len(B))  #liste de 0 au ((nombre de lignes de la matrice B)-1)
        b=range(len(B[0])) #liste de 0 au ((nombre de colonnes de la matrice B) -1)
        Z=[[0 for i in a] for j in b] #génération d'une matrice nulle de dimensions de la transposée de B
        print(Z)  # impression de la matrice Z de la ligne précédente pour vérification
        for i in a:
            for j in b:
                Z[j][i]= B[i][j] # détermination des coefficents de la matrice transposée de B 
        return(Z)
    ------------------------------------------------------------------------------------------------------
    Second programme (celui qui ne renvoie pas la matrice transposée, j'ignore pourquoi):
    ----------------------------------------------------------------------------------------------------------
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    def transposecarre(B): #Entree : une matrice ; Sortie: la matrice transposée de celle en entrée.
        a=range(len(B)) #liste de 0 au ((nombre de lignes de la matrice B)-1)
        b=range(len(B[0])) #liste de 0 au ((nombre de colonnes de la matrice B) -1)
        Z=[[0]*len(B)]*len(B[0]) #génération d'une matrice nulle de dimensions de la transposée de B
        print(Z)  # impression de la matrice Z de la ligne précédente pour vérification
        for i in a:
            for j in b:
                Z[j][i]= B[i][j]  # détermination des coefficents de la matrice transposée de B 
        return(Z)
    -------------------------------------------------------------------------------------------------------------
    Remarque : la matrice nulle Z générée est la même dans les deux programmes , la suite des deux programmes est identique. Alors, pourquoi le second programme ne renvoie pas la matrice transposée de celle en entrée ? (ce qui est bien le cas du premier programme).
    Je vous remercie d'avance pour vos explications.
    Bonne journée.
    Fichiers attachés Fichiers attachés

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    [QUOTE=YannGARO;10687237]la matrice nulle Z générée est la même dans les deux programmes , la suite des deux programmes est identique. Alors, pourquoi le second programme ne renvoie pas la matrice transposée de celle en entrée ? (ce qui est bien le cas du premier programme)./QUOTE]

    Vous voyez bien que la différence est dans la ligne 4 i.e. la création de Z.
    Lancez la console Python et jouez avec:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    >>> A = [0, 0]
    >>> L = [A, A, A]
    >>> A[0] = 1
    >>> L
    [[1, 0], [1, 0], [1, 0]]
    Avec une liste de 3 fois le même objet, si on modifie l'objet, tous les éléments de la liste apparaitront modifiés.

    Alors que si j'écris:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    >>> L = [ list(A), list(A), list(A)]
    >>>
    >>> L
    [[1, 0], [1, 0], [1, 0]]
    >>> A[0] = 'X'
    >>> L
    [[1, 0], [1, 0], [1, 0]]
    La liste a été construite à partir de copies: je modifie l'original et le contenu de la liste (les copies) ne change pas.
    Conclusion: une liste d'objets est autre chose qu'un tableau de nombres.

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

  3. #3
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Salut,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    >>> l = [[0]*5]*5
    >>> l
    [[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]]
    >>> l[1][2] = "*"
    >>> l
    [[0, 0, '*', 0, 0], [0, 0, '*', 0, 0], [0, 0, '*', 0, 0], [0, 0, '*', 0, 0], [0, 0, '*', 0, 0]]
    CQFD

  4. #4
    Nouveau Candidat au Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2019
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2019
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Transposition d'une matrice
    Bonjour,

    merci pour vos explications, j'ai compris. (Il faut faire attention à la façon de générer une matrice dans Python).
    Cordialement

  5. #5
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par YannGARO Voir le message
    (Il faut faire attention à la façon de générer une matrice dans Python).
    Surtout quand ce n'est pas une "matrice" (pour çà on utilisera plutôt numpy) mais une liste d'objets/listes.

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

Discussions similaires

  1. Réponses: 16
    Dernier message: 17/11/2008, 13h46
  2. Créer une matrice avec TImage
    Par yann87 dans le forum Langage
    Réponses: 4
    Dernier message: 16/04/2008, 16h42
  3. Calculer une matrice avec la méthode de EULER
    Par lematlabeur dans le forum MATLAB
    Réponses: 7
    Dernier message: 05/11/2007, 18h22
  4. Redimensionner une matrice avec "reshape"
    Par kmaniche dans le forum Images
    Réponses: 9
    Dernier message: 07/06/2006, 18h35
  5. cmt se connecté a oracle pour faire une requete avec python
    Par dipajero dans le forum Bibliothèques tierces
    Réponses: 6
    Dernier message: 28/12/2005, 20h22

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