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 :

Construction matrice M


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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 Construction matrice M
    Bonjour,

    j'ai fait un autre sujet sur la construction d'une matrice , mais c'est un peu devenu un topic trop mélangé .

    Si je comprends cette exo , ce serait magnifique
    Soit Z = [] ; coder , à partir de Z , la construction de M , la matrice [[1,2,3],[4,5,6]];généralisez pour n'importe quelle matrice de n lignes par m colonnes .
    L'indice est de coder une fonction matrice binaire .

  2. #2
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 062
    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 062
    Par défaut
    Soit Z = [] ; coder , à partir de Z
    Que représente Z ? Ne me dis pas que c'est une liste comportant la valeur de m colonnes et n lignes ?

    C'est plus simple de coder

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    def create_matrix(m, n):
        # suite
    que

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    def create_matrix(Z=[]):
        m, n = Z
        # suite
    Si on a une matrice dont la caractéristique est 3x3, la fonction doit retourner [[1, 2, 3], [4, 5, 6], [7, 8, 9]] ?

    Pourquoi mettre des entiers numérotés de 1 à la taille de la matrice ?

    Pourquoi ne pas mettre des 0 ou des None ? [[0, 0, 0], [0, 0, 0], [0, 0, 0]] ou mieux [[None, None, None], [None, None, None], [None, None, None]] ?

  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
    Citation Envoyé par fred1599 Voir le message
    Que représente Z ? Ne me dis pas que c'est une liste comportant la valeur de m colonnes et n lignes ?

    C'est plus simple de coder

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    def create_matrix(m, n):
        # suite

    Si on a une matrice dont la caractéristique est 3x3, la fonction doit retourner [[1, 2, 3], [4, 5, 6], [7, 8, 9]] ?
    Le prof a dit qu'on peut zapper pour la compréhension le Z , çà peut induire à l'erreur , le plus important c'est la construction de M donc de la matrice .
    Oui , la caractéristique 3x3 ressemble à l'exo sauf qu'ici on nous dit de s’arrêter à [[1, 2, 3], [4, 5, 6]] .

    Tu as dit : ""Pourquoi mettre des entiers numérotés de 1 à la taille de la matrice ?""
    Je pense que c'est pour ne pas confondre avec le 0 et la ligne n =0


    L'expression m = n + 1 ne sert pas vraiment , enfin , je vois pas comment l'utiliser bien .
    Ce code que j'ai fait , est faux mais il y'a une chose qui m'intrigue , est-ce que le but de l'exo est de trouver [[1, 2, 3], [4, 5, 6]] ou de trouver ces chiffres à la verticale ? En plus , ils sont répétés , je trouve çà bizarre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    >>> def matrice(n, m) :
    	for n in range(1, 7) :
    		n = 1 ; n = 2 ; n = 3 ; n = 4 ; n = 5 ; n = 6
    		print(n)
    		for m in range(1, 7) :
    			m = n + 1
    			print(m)
     
     
    >>> matrice(1, 2)
    6
    7
    7
    7
    7
    7
    7
    6
    7
    7
    7
    7
    7
    7
    6
    7
    7
    7
    7
    7
    7
    6
    7
    7
    7
    7
    7
    7
    6
    7
    7
    7
    7
    7
    7
    6
    7
    7
    7
    7
    7
    7

    D'habitude , je réfléchis pas autant pour faire un code pourtant clodion a essayé de me faire piger comment savoir ce que fait mon code ,et ce que j'attends du code ( c'est un peu philosophique )

    J'espère que la nuit va me porter conseil

  4. #4
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 062
    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 062
    Par défaut
    Allez à toi de créer la fonction avec les données ci-dessous fait sur l'interpréteur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    >>> COLUMN = 3
    >>> LINE = 2
    >>> MAXI = COLUMN * LINE
    >>> currentVal = 0
    >>> mat = []
    >>> while currentVal < MAXI:
    ...     line = []
    ...     for i in range(COLUMN):
    ...         line.append(currentVal+1)
    ...         currentVal += 1
    ...     mat.append(line)
    ... 
    >>> mat
    [[1, 2, 3], [4, 5, 6]]

  5. #5
    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
    Waw tu es génial , ton code est super bien fait .
    Tu as utilisés la boucle while , ce qui fait que currentVal est inférieur à 6 , le bloc d'instruction sera répété continuellement .Ce qui est intéressant , c'est aussi comment tu gères les variables , je vois que currentval a changé de valeur passant de 0 à 1 , çà ressemble à l'expression m = n + 1 mais c'est pas la méme chose .La méthode append() est super bien utilisé comme tu as initialiser une variable 'line' avant while , ce qui fait que line s'imbrique dans la variable mat , et çà explique les fameux doubles crochets obtenus .

    Mais , la chose la plus intéressante est ta façon d'avoir mis 'mat.append(line)' au méme niveau que la boucle for , au début ,j'ai fait l'erreur de mettre cette expression au méme niveau 'line.append(currentVal+1) et currentVal += 1' , et çà donne le double de chaque liste( en fait une sous-liste de 6 élements ) .

    J'ai essayé de mettre à range deux arguments , et çà marche vraiment aussi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    >>> while currentVal < MAXI:
    	line = []
    	column = []
    	for i in range(COLUMN, LINE) :
    		line.append(currentVal+1)
    		currentVal += 1
    	mat.append(line)
    	mat.append(column)
     
     
    >>> mat
    [[1, 2, 3], [4, 5, 6]]
    La boucle while est efficace pour ce genre de cas (j'ai lu le livre en ligne que m'a conseillé clodion )

    _Comment tu as eu l'idée de currentVal (actuelle valeur en français)?
    Sur le net , j'ai vu un lien http://api.jquery.com/val/ et c'est la méthode val()


    Merci beaucoup pour ton aide

  6. #6
    Membre émérite
    Homme Profil pro
    Aucune activité
    Inscrit en
    Novembre 2011
    Messages
    505
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Aucune activité

    Informations forums :
    Inscription : Novembre 2011
    Messages : 505
    Par défaut
    Bonsoir,

    Citation Envoyé par Kurodiam Voir le message
    J'ai essayé de mettre à range deux arguments , et çà marche vraiment aussi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    >>> while currentVal < MAXI:
    	line = []
    	column = []
    	for i in range(COLUMN, LINE) :
    		line.append(currentVal+1)
    		currentVal += 1
    	mat.append(line)
    	mat.append(column)
     
     
    >>> mat
    [[1, 2, 3], [4, 5, 6]]
    Sauf erreur de ma part, cela ne fonctionne pas du tout…
    En premier parce que vous n'avez toujours pas compris le fonctionnement de "range".
    Si vous avez l'impression que cela fonctionne, c'est, sans doutes, simplement parce que vous avez écrit ce bout de script juste après celui de fred1599.
    Car ici, votre boucle boucle "for…" n'est pas exécutée, donc currentVal n'est jamais incrémenté et donc boucle sans fin…

    Clodion

    Désolé plxpy!! Je me suis fait griller!!

  7. #7
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 062
    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 062
    Par défaut
    Il y a d'autres solutions plus élégantes sans doute, mais celle-ci est en adéquation avec le niveau attendu...

    Autre chose aurait paru assez louche, maintenant rien ne dis que votre professeur ne lit pas les réponses aussi, dommage pour toi

    Je n'ai pas trop regardé les explications avant l'énoncé, seul le résultat final est important, celui ci-dessous

    Tu m'as dis que le professeur voulait arriver à ce résultat, je donne une façon de faire, mais qui n'a absolument rien d'exceptionnelle, juste une réflexion sur papier ou dans ta tête aurait permis de faire cela seule.

    Edit:Je n'avais pas vu les réponses précédentes, mais évidemment je suis 100% en accord avec mes collègues plxpy et clodion.

  8. #8
    Membre Expert Avatar de plxpy
    Homme Profil pro
    Ingénieur géographe
    Inscrit en
    Janvier 2009
    Messages
    792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur géographe
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2009
    Messages : 792
    Par défaut
    Du grand n'importe quoi !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    >>> while currentVal < MAXI:
    	line = []
    	column = []
    	for i in range(COLUMN, LINE) :
    		line.append(currentVal+1)
    		currentVal += 1
    	mat.append(line)
    	mat.append(column)
    Je rappelle que COLUMN vaut 3, LINE vaut 2, MAXI, le produit vaut 6.

    A la ligne 4, le range(COLUMN, LINE) i.e range(3,2) est ... vide (python 2 ou 3) et on ne rentre jamais dans la boucle for.

    CurrentVal ne s'incrémente donc jamais et n'atteint jamais MAXI

    Donc, on remplit petit à petit, mais surement, mat avec des listes vides.

    Qu'est-ce que c'est que cette "sortie" bidonnée ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    >>> mat
    [[1, 2, 3], [4, 5, 6]]

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

Discussions similaires

  1. construction de la matrice RR
    Par asmare dans le forum Algorithmes et structures de données
    Réponses: 0
    Dernier message: 15/04/2013, 11h41
  2. [Numpy] Construction de matrice
    Par toniobuteau dans le forum Calcul scientifique
    Réponses: 6
    Dernier message: 21/11/2012, 00h17
  3. Réponses: 16
    Dernier message: 17/11/2008, 13h46
  4. Construction d'un graphe étoilé à partir d'une matrice
    Par jyboo dans le forum Interfaces Graphiques en Java
    Réponses: 10
    Dernier message: 15/02/2008, 17h38
  5. Construction matrice n*m*3
    Par lastrecrue dans le forum MATLAB
    Réponses: 7
    Dernier message: 30/03/2007, 09h48

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