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 :

matrice en python


Sujet :

Python

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 12
    Par défaut matrice en python
    Bonjour,

    J'ai un petit problème pour me créer une matrice en python : voilà le détail :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    >>> matrix=[[""]*3]*5
    >>> [['', '', ''], ['', '', ''], ['', '', ''], ['', '', ''], ['', '', '']]
    Jusque là, tout va bien mais quand je vais ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    >>> matrix[0][0]="test"
    >>> matrix
    [['test', '', ''], ['test', '', ''], ['test', '', ''], ['test', '', ''], ['test', '', '']]
    Catastrophe. Je voulais obtenir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    >>> matrix
    [['test', '', ''], ['', '', ''], ['', '', ''], ['', '', ''], ['', '', '']]
    Auriez vous une solution ? Sachant que la matrice doit être déclarée à la bonne taille dès le début. J'ai essayé avec numpy ou array sans succès. Toute aide serait la bienvenue..

  2. #2
    Membre Expert
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 067
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 067
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    matrix = [[""]*3 for foo in range(5)]

  3. #3
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 486
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    C'est un problème connu.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    M = [[0 for j in range(0,3)] for i in range(0,5)]
     
    print M
    [[0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]]
    M[0][0] = "test"
     
    print M
    [['test', 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]]
    Quand on a plusieurs matrices à créer, il est pratique de fabriquer une fonction lambda:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    mat = lambda n, m: [[0 for j in range(0,m)] for i in range(0,n)]
    print mat(5,3)
    [[0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]]

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 12
    Par défaut
    ah très bien merci.

  5. #5
    Nouveau candidat au Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2004
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Novembre 2004
    Messages : 3
    Par défaut
    Bonjour,

    Je me permets de faire remonter ce sujet car je viens de rencontrer le même problème, et je suis content d'avoir trouvé une solution sur le forum. Néanmoins je ne comprends pas pourquoi la modification sur la matrice Q ne fonctionne pas en la déclarant de cette façon, alors qu'elle fonctionne sur P et que P=Q.

    Si quelqu'un a une explication, je suis très intéressé.

    Merci.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    >>> P=[[0,0,0],[0,0,0],[0,0,0]]
    >>> Q=[[0]*3]*3
     
    >>> P==Q
    True
     
    >>> P[0][0]=1
    >>> Q[0][0]=1
     
    >>> P
    [[1, 0, 0], [0, 0, 0], [0, 0, 0]]
    >>> Q
    [[1, 0, 0], [1, 0, 0], [1, 0, 0]]

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

    Ecrivons:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    >>> a = 0
    >>> x = [a]*3
    Je fabrique une liste qui contiendra 3 références au même objet "a".
    Donc si je fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    >>> x[1]=3
    >>> x
    [0, 3, 0]
    on remplace l'objet en position 1 par un autre objet.

    Si on remplace a par [ 0, 0, 0 ]:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    >>> a = [0, 0, 0]
    >>> x = [a]*3
    >>> x[1]=3
    >>> x
    [[1, 0, 0], 3, [1, 0, 0]]
    >>>
    remplacer l'élément en position 1 par autre chose aura le même effet.
    Par contre, c'est aussi 3 fois la référence au même objet donc si on modifie cet objet là, on verra 3 fois cette modification là:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    >>> a = [0, 0, 0]
    >>> x = [a]*3
    >>> a[0] = 'x'
    >>> x
    [['x', 0, 0], ['x', 0, 0], ['x', 0, 0]]
    >>>
    Avec P=[[0,0,0],[0,0,0],[0,0,0]] on construits une liste de 3 objets différents (mais égaux) plutôt que 3 références au même objet.

    Vous avez la même chose avec:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    >>> a = [0, 0, 0]
    >>> b = a
    >>> b[1] = 'x'
    >>> a
    [0, 'x', 0]
    L'assignation "b = a" ne crée pas une copie de l'objet associé à la variable "a" mais ajoute une référence à ce même objet. b[1] = 'x' modifie cet objet via (le chemin) "b", si on le regarde via (le chemin) "a" on trouvera la même chose.

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

  7. #7
    Nouveau candidat au Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2004
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Novembre 2004
    Messages : 3
    Par défaut
    Salut,

    Merci pour ta réponse, elle est parfaitement claire. J'avais connaissance des "problèmes" de copies de listes, mais je n'avais pas vu le rapport avec mon problème.

    Je suis prof de maths en lycée, je pythonne en amateur pour me former à la réforme qui introduit Python dans les programmes.

    Bonne soirée.

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

Discussions similaires

  1. Besoin d'aide table des sommations ( matrices sur python)
    Par younes789 dans le forum Général Python
    Réponses: 3
    Dernier message: 01/12/2014, 17h08
  2. Matrices et Python
    Par magicvinni dans le forum Calcul scientifique
    Réponses: 2
    Dernier message: 19/07/2011, 12h12
  3. Matrices en python
    Par Kikouyou1080 dans le forum Calcul scientifique
    Réponses: 3
    Dernier message: 23/05/2010, 09h10
  4. python et matrice
    Par helenafrench dans le forum Calcul scientifique
    Réponses: 7
    Dernier message: 11/03/2010, 12h59
  5. Matrices en Python
    Par ryu sensei dans le forum Calcul scientifique
    Réponses: 7
    Dernier message: 27/04/2007, 09h06

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