Matrice construction

Discutez d'informatique ici !
lulubibi28
Membre Relatif
Messages: 240
Enregistré le: 10 Nov 2013, 11:18

Matrice construction

par lulubibi28 » 02 Jan 2014, 18:13

Bonjour,


Si je comprends cette exo , ce serait magnifique :we: , je dois utiliser le langage python.
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 avec n et m comme paramètres ou variables locales .Pour généraliser, donnez vous deux variables m et n, et arrangez vous pour que votre code tourne pour toute valeur raisonnable de ces variables

J'ai tout essayé depuis 1 semaine mais je n'ai pas trouvé la solution :cette matrice a une liste de profondeur 2 et ses dimensions sont respectivement len(M) et len(M[0]).J'ai méme cherché sur wiképedia la définition d'une matrice , mais le cours veut que l'on fasse une matrice basique avec python et non un cas particulier .

Il faut utiliser range et for , genre ex: for n in range(1,7) : mais là suite ,j'en ai aucune idée .


Mon code obtenu est faux , mais je vous le montre :

Code: Tout sélectionner
>>> def matrice(x,y) :
   Z = []
   M = [1,2,3],[4,5,6]
   for x in range(2) : Z += [M]
   for y in range(3) : Z += [M]
   return 3*x + y + 1      # mais le prof a dit de ne pas utiliser cette expression , ni la méthode tuple ,comment faire ?
 
>>> matrice(1, 3)              # c'est complétement faux , la matrice a comme une sous-liste .
6
>>> matrice(2, 5)
6
>>> matrice(1, 0)
>>> M[0]
[1, 2, 3] # le seul truc qui est juste


Bonne année 2014 !



joel76
Membre Relatif
Messages: 230
Enregistré le: 11 Fév 2013, 15:31

par joel76 » 03 Jan 2014, 23:18

Il faut faire une boucle sur le nombre n de lignes. Dans chaque boucle tu dois faire une boucle pour remplir la ligne avec m colonne.
Code: Tout sélectionner
def matrice(n,m) :
    # initialisation de Z
    ..............
    # boucle sur le nombre de lignes
    for x in range(0,n) :
            # initalisation d'une matrice ligne
            ....................
            for y in range(0,m) :
               # on remplit la matrice ligne avec la bonne valeur
               ......................
            # on ajoute la matrice ligne à la matrice Z
            Z += ...
   # on renvoie la matrice
    return Z
   

lulubibi28
Membre Relatif
Messages: 240
Enregistré le: 10 Nov 2013, 11:18

par lulubibi28 » 05 Jan 2014, 16:50

Dsl , mais j'ai pas saisi :doh: .Pourquoi tu utilises 'x' ? Je pense que c'est plutôt in range(1, 7) ...Il y'a 2 sous-liste de 3 élèments :.Il faut utiliser la fonction append() mais cette dernière ne rajoute que l'élèment à la fin de liste ex : >>> z = [1,2]
>>> z.append(5)
>>> z
[1,2,5]

Et si je faisais Z = [] , çà n'arrangerait rien puisque il peut y avoir une boucle infinie sur une liste vide .
Une matrice à 2 dimensions a 2 lignes ,ici dans cette exo : la première [1,2,3] , la seconde [4,5,6] .

C'est vrai que range(1,4) donne [1,2,3] , mais je vois pas comment utiliser la boucle for et range :triste: .
Là en plus ,les nombres sont différents 1,2 .... et je sais même pas faire avec un nombre identique ex:
>>> def ligne(m) : # m pour le nombre de colonnes .
return [0]*m
>>> ligne(3)

[0, 0, 0]

joel76
Membre Relatif
Messages: 230
Enregistré le: 11 Fév 2013, 15:31

par joel76 » 05 Jan 2014, 17:41

J'ai écrit une fonction qui permet de créer la matrice dans n'importe quel cas.
J'utilise x et y car x est le numéro de ligne à remplir, x prend donc la valeur 0 pour la première ligne puis la valeur 1 pour la seconde.
y lui est utilisé pour décrire les éléments de chaque ligne.
Pour la première ligne j'ai m nombres à créer qui dépendent du numéro de ligne.
Supposons qu'on veuille créer matrice(2,3) qui donne [[1,2,3][4,5,6]]
La première ligne a pour indice 0 (x = 0)
Elle doit être remplie par 1 2 et 3
y est l'indice qui permet de remplir cette ligne, il est dans le range(0,3) et prend donc les valeur 0 1 et 2
pour obtenir les valeurs 1 2 3 il suffit donc que j'ajoute 1 à y.

Maintenant, pour la deuxième ligne, x a la valeur 1, y prend toujours les valeurs 0,1,2, Comment puis-je obtenir les valeurs 4 5 et 6, sachant que m à la valeur 3 et que 4 = 3 X 1 + 1 ?


Réfléchis à ce que je viens d'écrire et essaye maintenant de faire le programme.

lulubibi28
Membre Relatif
Messages: 240
Enregistré le: 10 Nov 2013, 11:18

par lulubibi28 » 05 Jan 2014, 19:33

D'aprés ce que tu dis :

Pour obtenir la valeur 5 et 6 , 5 = 4 x 1 + 1et 6 = 5 x 1 + 1 , le +1 c'est en fait pour rajouter 1 à y .
m a la valeur puisqu'il y'a 3 colonnes .Je trouve que m parait constant , comme tu as dit que 4 est une valeur , çà voudrait que élèment = m x n + 1 . Le n est le numéro de la ligne , et toi , tu as pris le symbole x , qui prend soit la valeur 0 ou 1 .La première ligne a pour indice x = 0.

joel76
Membre Relatif
Messages: 230
Enregistré le: 11 Fév 2013, 15:31

par joel76 » 05 Jan 2014, 19:35

n et m sont constants effectivement.
Mais, observe que y varie de 0 a m-1 (dans mon exemple de 0 à 2) donc
4 = 1 * 3 + 0 + 1
5 = 1 * 3 + 1 + 1
6 = 1 * 3 + 2 + 1

lulubibi28
Membre Relatif
Messages: 240
Enregistré le: 10 Nov 2013, 11:18

par lulubibi28 » 05 Jan 2014, 19:50

donc il y'a une relation entre y et m . Tu dis que y varie de 0 à m-1 , et dans ces formules , je vois se profiler le fameux y(valeur de 0 à 2) .Mais comment on peut exprimer mathématiquement un nombre qui varie de 0 à m-1? :we: ce serait y = m - 1 .

joel76
Membre Relatif
Messages: 230
Enregistré le: 11 Fév 2013, 15:31

par joel76 » 05 Jan 2014, 20:01

C'est le fameux range, for y in range(0,m)

lulubibi28
Membre Relatif
Messages: 240
Enregistré le: 10 Nov 2013, 11:18

par lulubibi28 » 05 Jan 2014, 20:14

mais y = m - 1 , c'est juste ou faux ?

En tout cas , je commence à percevoir comment cette fonction matrice pourrait être .C'est vrai que cet exo demande une certaine logique , les équations ne sont pas mon point fort :zen:

Si y prend la valeur 2 , m prend la valeur 3 : 3-1 = 2 ....Mais c'est pas logique puisque dans la matrice [[1,2,3]],[4,5,6]] , l'élèment 2 se situe dans la 2ème colonne de la première ligne .

joel76
Membre Relatif
Messages: 230
Enregistré le: 11 Fév 2013, 15:31

par joel76 » 05 Jan 2014, 20:20

Il n'y a pas d'équation, et y = m - 1 est faux.
On ne fait pas des maths, mais de la programmation : for y in range(0, m) signifie qu'on enchaine trois calculs, l'un pour y ayant la valeur 0, le deuxième pour y ayant la valeur 1 et enfin pour y ayant la valeur 2.

joel76
Membre Relatif
Messages: 230
Enregistré le: 11 Fév 2013, 15:31

par joel76 » 05 Jan 2014, 20:23

Si y prend la valeur 2 , m prend la valeur 3 : 3-1 = 2 ....
Mais c'est pas logique puisque dans la matrice [[1,2,3]],[4,5,6]] , l'élèment 2 se situe dans la 2ème colonne de la première ligne .
m ne change jamais de valeur, c'est un paramètre de la fonction.
Tu dois trouver la façon dont on calcule les vlauers de la matrice en fonction de leur numéro de ligne et de colonne.
C'est vrai que c'est dur la première fois, après on trouve plus vite ... :mur:

lulubibi28
Membre Relatif
Messages: 240
Enregistré le: 10 Nov 2013, 11:18

par lulubibi28 » 05 Jan 2014, 20:32

joel76 a écrit:m ne change jamais de valeur, c'est un paramètre de la fonction.
Tu dois trouver la façon dont on calcule les vlauers de la matrice en fonction de leur numéro de ligne et de colonne.
C'est vrai que c'est dur la première fois, après on trouve plus vite ... :mur:


Ok ! je vais essayer de chercher plus mais je pense que l'expression élèment = m x n + 1 est la plus proche de la réponse , non ? :we:
Je pense que c'est le mot 'en fonction' a un sens précis , mais n aussi , il est constant ?

joel76
Membre Relatif
Messages: 230
Enregistré le: 11 Fév 2013, 15:31

par joel76 » 05 Jan 2014, 22:16

lulubibi28 a écrit: mais n aussi , il est constant ?
Oui, c'est un paramètre de la fonction.

lulubibi28
Membre Relatif
Messages: 240
Enregistré le: 10 Nov 2013, 11:18

par lulubibi28 » 06 Jan 2014, 09:53

Merci pour ton aide .Là j'ai fait un code ,qui inclut ce qu'on a dit sur x qui prend soit la valeur 0 et 1 , et y qui prend soit la valeur 0,1,2 . Ce code , je l'ai fait sans n et m , déjà , pour ne pas m'embrouiller :

Code: Tout sélectionner
>> Z = [] ; M = []                  # ce qui est pratique , avec une liste vide ,c'est qu'on peut la remplir .
>>> for x in range(2) :
   for y in range(3) :
        Z += [3*x + y + 1]               
      M += [Z]                 # mais là , çà voudrait dire que M +=[[]] puisque que Z = []
      Z = []                     # çà fait deux fois , que Z = [] ,ce qui expliquerait les sous-listes en trop crée.

      
>>> M
[[1], [2], [3], [4], [5], [6]]                # çà se rapproche , je le sens !

joel76
Membre Relatif
Messages: 230
Enregistré le: 11 Fév 2013, 15:31

par joel76 » 06 Jan 2014, 10:47

Oui, tu te rapproches du bon code.
N'oublie pas que tu dois ajouter ta ligne après l'avoir contruite, donc hors de la boucle sur y.

lulubibi28
Membre Relatif
Messages: 240
Enregistré le: 10 Nov 2013, 11:18

par lulubibi28 » 06 Jan 2014, 12:21

joel76 a écrit:Oui, tu te rapproches du bon code.
N'oublie pas que tu dois ajouter ta ligne après l'avoir contruite, donc hors de la boucle sur y.


Il y'a deux boucles : la boucle x et y .La boucle y doit tourner 3 fois , et et la boucle x doit tourner 2 fois .
Code: Tout sélectionner
>>> Z = [] ; M = []
>>> for x in range(2) :
   for y in range(3) :
      Z += [3*x + y + 1]
   M += [Z]
   Z = []

   
>>> M
[[1, 2, 3], [4, 5, 6]]


Là , je vois que l'indentation est importante , mais pourquoi à ce point ?

Dans ton premier code , tu parles d'ajouter la matrice ligne à la matrice Z , donc en fait y'a rien à mettre dans la boucle x :
Code: Tout sélectionner
def matrice(n,m) :
    # initialisation de Z
    ..............
    # boucle sur le nombre de lignes
    for x in range(0,n) :
            # initalisation d'une matrice ligne
            ....................
            for y in range(0,m) :
               # on remplit la matrice ligne avec la bonne valeur
               ......................
            # on ajoute la matrice ligne à la matrice Z
            Z += ...
   # on renvoie la matrice
    return Z


Mais l'initialisation a quel sens en fait ? çà veut dire que l'on place une variable ?J'ai un défaut , j'ai tendance à zapper certains termes importants à comprendre sur Python (et en général en programmation) , çà me permettrait de mieux comprendre tes réponses techniques .

joel76
Membre Relatif
Messages: 230
Enregistré le: 11 Fév 2013, 15:31

par joel76 » 06 Jan 2014, 16:54

Code: Tout sélectionner
>>> Z = [] ; M = []
>>> for x in range(2) :
   for y in range(3) :
      Z += [3*x + y + 1]
   M += [Z]
   Z = []

   
>>> M
Je réécris ton oce pour que tu comprennes mieux le principe des initialisations
Code: Tout sélectionner
>>> M = []   # initialisation de la matrice M résultat
>>> for x in range(2) :
         Z = [] # initalisation de la matrice Z "ligne"
   for y in range(3) :
      Z += [3*x + y + 1]
   M += [Z]
      
>>> M

lulubibi28
Membre Relatif
Messages: 240
Enregistré le: 10 Nov 2013, 11:18

par lulubibi28 » 06 Jan 2014, 19:51

Merci pour tes explications :we: ! J'ai réussi à coder la fonction matrice :dodo:

lulubibi28
Membre Relatif
Messages: 240
Enregistré le: 10 Nov 2013, 11:18

par lulubibi28 » 07 Jan 2014, 10:18

J'ai parlé trop vite :triste: !Ma fonction matrice ne marche pas :

Code: Tout sélectionner
  >>> def matrice(n,m) :

...     Z = []                            # initialisation de la matrice Z
...     for x in range(0,n) :             # boucle sur le nombre de lignes
...             M = []                    # initalisation de la matrice ligne
...             for y in range(0,m) :
...                     Z += [3*x + y + 1]      # pour remplir la matrice ligne
...             M += [Z]                        # on ajoute la matrice ligne à la matrice Z mis au début .
...     return Z                               # on retourne pour avoir la matrice Z .


Il y'a un élèment à ajouter , la boucle principale c'est le premier for ? c'est la première fois que j'entends parler de boucle principale :hein: ! Je confonds entre liste principale et sous-liste :marteau:
Mais je sais que cette matrice a deux lignes , et 3 colonnes :

M = [ [1, 2, 3],
[4, 5, 6]]

joel76
Membre Relatif
Messages: 230
Enregistré le: 11 Fév 2013, 15:31

par joel76 » 07 Jan 2014, 11:17

Regarde bien le nom de la matrice que tu initialises en premier, c'est celle que tu dois renvoyer.
Je t'ai donné le modèle, complète le.

 

Retourner vers ϟ Informatique

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité

Tu pars déja ?



Fais toi aider gratuitement sur Maths-forum !

Créé un compte en 1 minute et pose ta question dans le forum ;-)
Inscription gratuite

Identification

Pas encore inscrit ?

Ou identifiez-vous :

Inscription gratuite