trouver le maxi d'une liste d'entier.

Le
JB BUTET
Bonjour :)

Je suis en train de m'essayer au traitement d'une image de 10 pix/10 pix
(faut commencer petit ;) )

J'aimerai trouver la ligne qui est la plus lumineuse.

Donc j'ai fait la somme des valeurs des pixels pour chaque ligne.
exemple :
print sommeligne
[110, 333, 456, 678, 864, 200, 345, 543, 123, 456]

Ensuite, j'aimerai pouvoir tirer de cette liste la valeur maximale et
retrouver l'indice.

Y'a-t-il une methode toute faite pour cela ?

A bientot.

JB
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
elGringo
Le #613138
Salut,

liste = [110, 333, 456, 678, 864, 200, 345, 543, 123, 456]
print max(liste), liste.index(max(liste))
864 4




par contre, ca ne te renverra l'index que de la premiere valeur max
(si il y en plusieurs).



Amaury Forgeot d'Arc
Le #612899
Bonjour,

Bonjour :)

Je suis en train de m'essayer au traitement d'une image de 10 pix/10 pix
(faut commencer petit ;) )

J'aimerai trouver la ligne qui est la plus lumineuse.

Donc j'ai fait la somme des valeurs des pixels pour chaque ligne.
exemple :
print sommeligne
[110, 333, 456, 678, 864, 200, 345, 543, 123, 456]

Ensuite, j'aimerai pouvoir tirer de cette liste la valeur maximale et
retrouver l'indice.

Y'a-t-il une methode toute faite pour cela ?


J'imagine que tu connais la fonction max():
max(sommeligne)
864



Et pour trouver l'indice de ce 864:
sommeligne.index(max(sommeligne))
4




index(), max()... ce sont les mots mêmes de ta question (en anglais)

Mais attention, il y a peut-être plusieurs lignes correspondant au
maximum! S'il faut toutes les trouver, c'est autre chose...
valeurMax = max(sommeligne)
[i for i, v in enumerate(sommeligne) if v == valeurMax]
[4]




Et je ne peux résister à montrer une méthode qui donne la réponse en ne
parcourant qu'une seule fois la liste :
import operator
max(enumerate(sommeligne), key=operator.itemgetter(1))
(4, 864)



Mais ce n'est pas sûr que ce soit plus rapide, et c'est moins lisible...


--
Amaury Forgeot d'Arc



JB BUTET
Le #612898
Merci a tous,

J'ai encore des soucis de syntaxe ...

c'est pourquoi ca ne marchait pas bien...

Le python, c'est bien, mangez-en.

Merci.

JB

--
http://astrolix.org

Bonjour,

Bonjour :)

Je suis en train de m'essayer au traitement d'une image de 10 pix/10
pix (faut commencer petit ;) )

J'aimerai trouver la ligne qui est la plus lumineuse.

Donc j'ai fait la somme des valeurs des pixels pour chaque ligne.
exemple :
print sommeligne
[110, 333, 456, 678, 864, 200, 345, 543, 123, 456]

Ensuite, j'aimerai pouvoir tirer de cette liste la valeur maximale et
retrouver l'indice.

Y'a-t-il une methode toute faite pour cela ?


J'imagine que tu connais la fonction max():
max(sommeligne)
864



Et pour trouver l'indice de ce 864:
sommeligne.index(max(sommeligne))
4




index(), max()... ce sont les mots mêmes de ta question (en anglais)

Mais attention, il y a peut-être plusieurs lignes correspondant au
maximum! S'il faut toutes les trouver, c'est autre chose...
valeurMax = max(sommeligne)
[i for i, v in enumerate(sommeligne) if v == valeurMax]
[4]




Et je ne peux résister à montrer une méthode qui donne la réponse en ne
parcourant qu'une seule fois la liste :
import operator
max(enumerate(sommeligne), key=operator.itemgetter(1))
(4, 864)



Mais ce n'est pas sûr que ce soit plus rapide, et c'est moins lisible...







Eric Deveaud
Le #612622
Amaury Forgeot d'Arc wrote:

J'imagine que tu connais la fonction max():
max(sommeligne)
864



Et pour trouver l'indice de ce 864:
sommeligne.index(max(sommeligne))
4





Et je ne peux résister à montrer une méthode qui donne la réponse en ne
parcourant qu'une seule fois la liste :
import operator
max(enumerate(sommeligne), key=operator.itemgetter(1))
(4, 864)



Mais ce n'est pas sûr que ce soit plus rapide, et c'est moins lisible...



et pouruo ine pas faire simplement
max_val = max(sommeligne)
index_max_val = sommeligne.index(max_val)

on a un seul parcour aussi non ???

Eric




Jerome
Le #612621
Eric Deveaud wrote:
Amaury Forgeot d'Arc wrote:
J'imagine que tu connais la fonction max():
max(sommeligne)
864



Et pour trouver l'indice de ce 864:
sommeligne.index(max(sommeligne))
4





Et je ne peux résister à montrer une méthode qui donne la réponse en ne
parcourant qu'une seule fois la liste :
import operator
max(enumerate(sommeligne), key=operator.itemgetter(1))
(4, 864)



Mais ce n'est pas sûr que ce soit plus rapide, et c'est moins lisible...



et pouruo ine pas faire simplement
max_val = max(sommeligne)
index_max_val = sommeligne.index(max_val)

on a un seul parcour aussi non ???

Eric


Tu as 2 parcours si tu fais ça, 1 pour le 'max' et 1 pour le 'index'





Eric Deveaud
Le #612620
Jerome wrote:
Eric Deveaud wrote:

et pouriquoi ne pas faire simplement
max_val = max(sommeligne)
index_max_val = sommeligne.index(max_val)

on a un seul parcour aussi non ???


Tu as 2 parcours si tu fais ça, 1 pour le 'max' et 1 pour le 'index'


en effet, je mérite des baffes :-<

Eric


maric
Le #612374
Bonjour,

Bonjour :)

Je suis en train de m'essayer au traitement d'une image de 10 pix/10
pix (faut commencer petit ;) )

J'aimerai trouver la ligne qui est la plus lumineuse.

Donc j'ai fait la somme des valeurs des pixels pour chaque ligne.
exemple :
print sommeligne
[110, 333, 456, 678, 864, 200, 345, 543, 123, 456]

Ensuite, j'aimerai pouvoir tirer de cette liste la valeur maximale et
retrouver l'indice.

Y'a-t-il une methode toute faite pour cela ?


J'imagine que tu connais la fonction max():
max(sommeligne)
864



Et pour trouver l'indice de ce 864:
sommeligne.index(max(sommeligne))
4




index(), max()... ce sont les mots mêmes de ta question (en anglais)

Mais attention, il y a peut-être plusieurs lignes correspondant au
maximum! S'il faut toutes les trouver, c'est autre chose...
valeurMax = max(sommeligne)
[i for i, v in enumerate(sommeligne) if v == valeurMax]
[4]




Et je ne peux résister à montrer une méthode qui donne la réponse en ne
parcourant qu'une seule fois la liste :
import operator
max(enumerate(sommeligne), key=operator.itemgetter(1))
(4, 864)



Mais ce n'est pas sûr que ce soit plus rapide, et c'est moins lisible...


C'est forcément plus rapide à mesure que la liste grossit mais cela ne

donne toujours que l'index du premier maximum.
la solution la plus sûr en terme de perfs/lisibilité dans ce cas c'est
un algorithme plus classique (non testé) :

max=-1
for index, value in enumerate(someligne) :
if value > max :
max, indexes = value, [index]
elif value == max :
indexes.append(index)




Cémoi
Le #629415
Bonjour,

Bonjour :)

Je suis en train de m'essayer au traitement d'une image de 10 pix/10
pix (faut commencer petit ;) )

J'aimerai trouver la ligne qui est la plus lumineuse.

Donc j'ai fait la somme des valeurs des pixels pour chaque ligne.
exemple :
print sommeligne
[110, 333, 456, 678, 864, 200, 345, 543, 123, 456]

Ensuite, j'aimerai pouvoir tirer de cette liste la valeur maximale et
retrouver l'indice.

Y'a-t-il une methode toute faite pour cela ?


J'imagine que tu connais la fonction max():
max(sommeligne)
864



Et pour trouver l'indice de ce 864:
sommeligne.index(max(sommeligne))
4




index(), max()... ce sont les mots mêmes de ta question (en anglais)

Mais attention, il y a peut-être plusieurs lignes correspondant au
maximum! S'il faut toutes les trouver, c'est autre chose...


Je propose une solution qui repose complètement sur des 'arrays' (à la
sauce scipy/numpy) et des fonctions qui leur sont dédiées:

a = [110, 333, 456, 678, 864, 200, 345, 543, 123, 456]
a_max_indices = nonzero (equal (a, max (a)))[0]

On peut très facilement chercher autre chose que des maximums, en
cherchant par exemple tous les supérieurs ou égaux à la moyenne, avec
les fonctions greater_equal() et mean() en lieu et place de equal() et
max().

Pour récupérer les valeurs, il suffit de faire un take (a, a_max_indices).

Je n'est pas cherché à évaluer les performances sur des gros tableaux,
l'intérêt me parait être la lisibilité et la souplesse, tout en
utilisant des fonctions qui ont été développées dans ce but.

HTH,

Laurent


PS: on peut faire la même chose en utilisant des méthodes plutôt que des
fonctions.




Publicité
Poster une réponse
Anonyme