2013-07-10 2 views
30

Ich versuche, eine Funktion zu finden, die alle Vorkommen des Maximums in einer gegebenen Liste zurückgibt.Wie macht numpy.argmax alle Vorkommen des Maximums zurück?

numpy.argmax jedoch gibt nur das erste Auftreten, das es findet, zurück. Zum Beispiel:

from numpy import argmax 

list = [7, 6, 5, 7, 6, 7, 6, 6, 6, 4, 5, 6] 
winner = argmax(list) 

print winner 

gibt nur Index 0. Aber ich möchte, dass es alle Indizes gibt: 0, 3, 5.

Antwort

43

Als Dokumentation von np.argmax sagt: "Im Falle mehrerer Vorkommen der Maximalwerte werden die Indizes zum ersten Auftreten zurückgegeben.", so brauchen Sie eine andere Strategie.

Eine Option, die Sie haben unter Verwendung np.argwhere in Kombination mit np.amax:

>>> import numpy as np 
>>> list = [7, 6, 5, 7, 6, 7, 6, 6, 6, 4, 5, 6] 
>>> winner = np.argwhere(list == np.amax(list)) 
>>> print winner 
[[0] 
    [3] 
    [5]] 
>>> print winner.flatten().tolist() # if you want it as a list 
[0, 3, 5] 
+1

es ist leicht zu verwirrt durch das 'a' in' amax': es steht für 'array', nicht' arg'. mit "max" (ein Alias ​​für "amax") könnte man besser dran sein als mit "amax". – dbliss

0

Viel einfacher ...

Liste [Liste == np.max (Liste)]

+0

Ja, aber die Verwendung von Argwhere gibt die Indizes des Auftretens des Maximums zurück, nach denen @Marieke_W gefragt hat – Dai

Verwandte Themen