Matrice, extraire par index

Matrice, extraire par index - Python - Programmation

Marsh Posté le 07-01-2014 à 19:47:35    

Bonjour,
 
J'aimerais coder une fonction  colonne2() qui permet d'extraire de M tous les éléments d'index 2 ,et il faut généraliser ensuite une
fonction colonne() pour n'importe quelle colonne d'une matrice de n lignes par m colonnes".
 
L'objectif est de d'extraire les éléments d'index 2 ou indice 2  de chaque ligne ex : 3, 6 .... .
Mais la fonction col2() sera t-elle binaire ? Les 2 arguments : la matrice et l'indice.
Il faut utiliser 2 boucles for… enfin je pense  :(  
 
Déjà pour coder une matrice de n lignes par m colonnes : par ex : matrice(2,3) donne [[1, 2, 3], [4, 5, 6]].
 

Code :
  1. >>> def matrice(n,m) :
  2.     m = []
  3.     for e in range(n) :
  4.         z = []
  5.         for o in range(m) :
  6.             z += [3*e + o + 1]
  7.         m += [z]
  8.     return m


 
_ Aussi , je n'arrive pas à utiliser la méthode append()  :pfff: , append est sensé rajouter un élèment à la fin par exemple d'une liste :
 
je sais que je n'ai pas utiliser la méthode append() , mais j'ai découvert une chose intéressante :
 
     

Code :
  1. >>> m=[]
  2.      >>> m.append(range(3))
  3.      >>> m.append(range(3, 6)
  4.      >>> m.append(range(6, 9))
  5.      >>>m
  6.      [[0, 1, 2], [3, 4, 5], [6, 7, 8]]      # là , cela commence à 0 , mais dans mon cas çà doit commencer par 1 .


Merci d'avance  :jap:

Message cité 1 fois
Message édité par giny28 le 08-01-2014 à 17:43:58
Reply

Marsh Posté le 07-01-2014 à 19:47:35   

Reply

Marsh Posté le 07-01-2014 à 20:57:18    

Bon, je ne suis pas sûr de beaucoup t'aider mais ...
(1) numpy est une librairie dédiée au calcul, en particulier matriciel
(2) si tu dois faire tes matrices à la main et que les performances ne sont pas prioritaires, pourquoi ne pas utiliser le type dict ? Quelque chose comme d = { (0,0) : n00, (0,1) : n01, (1,0) : n10, ... }
 
Qu'en penses-tu ?


---------------
rule #1 : trust the python
Reply

Marsh Posté le 07-01-2014 à 22:16:12    

Je connais pas ces méthodes , numpy ,j'en ai entendu parler , mais ce n'est pas de mon niveau . En tout cas , merci pour ton aide  :)

Reply

Marsh Posté le 08-01-2014 à 13:29:11    

giny28 a écrit :

Bonjour,
 
J'aimerais coder une fonction  colonne2() qui permet d'extraire de M tous les éléments d'index 2 ,et il faut généraliser ensuite une
fonction colonne() pour n'importe quelle colonne d'une matrice de n lignes par m colonnes".
 
L'objectif est de d'extraire les éléments d'index 2 ou indice 2  de chaque ligne ex : 3, 6 .... .
Mais la fonction col2() sera t-elle binaire ? Les 2 arguments : la matrice et l'indice.


Bah non, t'as que la matrice puisque l'indice est fixé à 2. colonne() aura probablement 2 arguments oui, mais pas colonne2.

giny28 a écrit :

Il faut utiliser 2 boucles for… enfin je pense  :(


Je vois pas pourquoi, tu itères sur les lignes et t'as un index fixe, où serait la 2e itération?

giny28 a écrit :

_ Aussi , je n'arrive pas à utiliser la méthode append()  :pfff: , append est sensé rajouter un élèment à la fin par exemple d'une liste


Oui?

Code :
  1. >>> l = []
  2. >>> l.append(42)
  3. >>> l.append(3)
  4. >>> l
  5. [42, 3]


giny28 a écrit :

je sais que je n'ai pas utiliser la méthode append() pour le code px10-1 , mais j'ai découvert une chose intéressante :
 
     

Code :
  1. >>> m=[]
  2.      >>> m.append(range(3))
  3.      >>> m.append(range(3, 6)
  4.      >>> m.append(range(6, 9))
  5.      >>>m
  6.      [[0, 1, 2], [3, 4, 5], [6, 7, 8]]      # là , cela commence à 0 , mais dans mon cas çà doit commencer par 1 .


Merci d'avance  :jap:


J'ai pas compris, c'est quoi la chose intéressante? que par défaut range() commence à 0 et soit un intervalle semi-ouvert? C'est marqué dans la doc: http://docs.python.org/2/library/functions.html#range


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 08-01-2014 à 19:02:24    

Prière de répondre en public aux questions d'intérêt public, pas en privé :o

 
giny28 a écrit :

Bonjour,

  

>>> def colonne(matrice, index):

 

element=[]
for i in matrice:
element += i[index]
return element

 

Voilà le code que j'obtiens , mais il ne marche pas , je sais pas pourquoi , comme au début il faut faire une fonction matrice , on doit mettre la fonction matrice en argument passé .

 

Merci pour ton aide ^^


+= c'est l'opération extend, pas append (donc ça prend une liste en paramètre, et ça la concatène au sujet)

 

et le nommage est pas terrible, "i" généralement c'est un index (numérique, dans un tableau) pas une ligne de matrice.

 

Accessoirement, "il ne marche pas" ça aide pas trop comme description, il est généralement suggéré de fournir toute erreur s'affichant (s'il y en a) ainsi que les comportements attendus et observés.


Message édité par masklinn le 08-01-2014 à 19:03:19

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 08-01-2014 à 19:09:20    

Merci pour la précision  :jap:  Voilà le code que j'obtiens , je laisse pour l'instant 'i' mais c'est en effet une bonne remarque  :)  
 
>>> def colonne(matrice, index):
 elements=[]
 for i in matrice:
        elements += [i[index]]
 return elements
 
>>> colonne(2, 3)
 
Traceback (most recent call last):
  File "<pyshell#40>", line 1, in <module>
    col2(matrice, 2)
  File "<pyshell#39>", line 3, in col2
    for i in matrice:
TypeError: 'function' object is not iterable

Reply

Marsh Posté le 08-01-2014 à 20:04:00    

giny28 a écrit :

Merci pour la précision  :jap:  Voilà le code que j'obtiens , je laisse pour l'instant 'i' mais c'est en effet une bonne remarque  :)

 

       elements += [i[index]]


Prière d'utiliser append là, c'est quoi cette horreur [:pingouino dei]

giny28 a écrit :


>>> colonne(2, 3)

 

Traceback (most recent call last):
  File "<pyshell#40>", line 1, in <module>
    col2(matrice, 2)
  File "<pyshell#39>", line 3, in col2
    for i in matrice:
TypeError: 'function' object is not iterable


Il y a une fonction matrice définie dans le premier post, je présume que c'est ce que tu as passé à colonne.

 

Accessoirement, colonne pourrait utiliser map (et, pourquoi pas, le rarement utilisé itemgetter), ou une listcomp.


Message édité par masklinn le 08-01-2014 à 20:04:32

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 21-01-2014 à 20:07:12    

Merci pour l'explication et les liens !

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed