Extraire élement index, matrice

Fermé
giny28 Messages postés 8 Date d'inscription mardi 7 janvier 2014 Statut Membre Dernière intervention 26 juillet 2014 - Modifié par giny28 le 7/01/2014 à 22:21
giny28 Messages postés 8 Date d'inscription mardi 7 janvier 2014 Statut Membre Dernière intervention 26 juillet 2014 - 21 janv. 2014 à 18:43
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]].

>>> def matrix(line,col) :
m = []
for e in range(n) :
z = []
for o in range(m) :
z += [3*e + o + 1]
m += [z]
return m

_ Aussi , je n'arrive pas à utiliser la méthode append() , 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 :

>>> m=[]
>>> m.append(range(3))
>>> m.append(range(3, 6)
>>> m.append(range(6, 9))

>>>m
[[0, 1, 2], [3, 4, 5], [6, 7, 8]] # là , cela commence à 0 , mais dans mon cas çà doit commencer par 1 .


Merci d'avance !


5 réponses

nidhogg-59 Messages postés 102 Date d'inscription mercredi 20 juin 2012 Statut Membre Dernière intervention 5 décembre 2015 27
Modifié par nidhogg-59 le 7/01/2014 à 23:54
Bonjour!

Pour ce qui est de créer des matrices, tu peux utiliser numpy;
Sinon, tu peux utiliser les listes de cette manière:

matrice=lambda a,b:[range(b*x+1,b*x+b+1)for x in range(a)]


ce qui équivaut à:
def matrice(a, b): # avec a=lignes et b=colonnes
    matrice = []
    for x in range a:
        matrice += range(b * x + 1, b * x + b + 1)    
              # j'ai ajouté +1 car tu voulais que ta matrice commence par 1 et non  
              # par 0, mais tu pourrais utiliser une variable si tu veux.
    return matrice


bon, c'est juste un petit raccourcis...

pour ce qui est de l'extraction d'élément, je n'ai pas compris ce que tu voullais dire par 'Mais la fonction col2() sera t-elle binaire ?'
sinon, ta fonction ressemblerait à ceci:
def col2(matrice, colonne):
    numbers=[]
    for i in matrice:
         numbers += i[colonne]
    return numbers

soit en simplifié:

col2=lambda matrice, colonne:[i[colonne] for i in matrice]


Voilà!
Au passage, juste pour info, les listes sous cette forme:
[expression for element in liste]
s'appellent des listes en compréhension et admettent aussi des condition:
[x for x in range(100) if x%3]
par exemple.
Ps: j'ai pas testé les codes... lol!
1