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)
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 :
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)
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
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.
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.
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.