Ich habe ein zweidimensionales NumPy-Array. Ich weiß, wie man die Maximalwerte über Achsen erhält:
>>> a = array([[1,2,3],[4,3,1]])
>>> amax(a,axis=0)
array([4, 3, 3])
Wie kann ich die Indizes der maximalen Elemente erhalten? Also ich möchte als Ausgabearray([1,1,0])
quelle
a = np.array([[1,4,3],[4,3,1]])
zu sehen, dass es zurückkehrti,j==0,1
, und vernachlässigen Sie die Lösung beii,j==1,0
. Verwenden Sie stattdessen für die Indizes aller Maximai,j = where(a==a.max()
.argmax()
gibt nur das erste Vorkommen für jede Zeile zurück. http://docs.scipy.org/doc/numpy/reference/generated/numpy.argmax.htmlWenn Sie dies jemals für ein geformtes Array tun müssen, funktioniert dies besser als
unravel
:Sie können auch Ihre Bedingungen ändern:
Das Obige gibt Ihnen Ergebnisse in der Form, die Sie angefordert haben. Alternativ können Sie in eine Liste von x, y-Koordinaten konvertieren, indem Sie:
quelle
indices = np.where(a==a.max())
in Zeile 3?.max()
anstelle von hingewiesen hat.argmax()
. Bitte bearbeiten Sie die Antwortx_y_coord = [(0, 2), (1, 1)]
dass die Antwort von @eumiro NICHT übereinstimmt und falsch ist. Versuchen Sie beispielsweise mit, um sicherzustellena = array([[7,8,9],[10,11,12]])
, dass Ihr Code keinen Treffer für diese Eingabe hat. Sie erwähnen auch, dass dies besser funktioniert alsunravel
, aber die von @blas veröffentlichte Lösung beantwortet das Problem des absoluten Maximums, nicht nur entlang einer Achse.quelle