it-swarm.com.de

Liefert die Position des größten Items in einem numpy-Array

Wie erhalte ich die Position des größten Objekts in einem mehrdimensionalen numpy-Array

60
kame

Die argmax() -Methode sollte helfen.

Update

(Nach dem Lesen des Kommentars) Ich glaube, dass die argmax()-Methode auch für mehrdimensionale Arrays funktionieren würde. Die verlinkte Dokumentation gibt ein Beispiel dafür:

>>> a = array([[10,50,30],[60,20,40]])
>>> maxindex = a.argmax()
>>> maxindex
3

Update 2

(Dank an KennyTM s Kommentar) Sie können unravel_index(a.argmax(), a.shape) verwenden, um den Index als Tuple zu erhalten:

>>> from numpy import unravel_index
>>> unravel_index(a.argmax(), a.shape)
(1, 0)
137
Manoj Govindan

(edit) Ich bezog mich auf eine alte Antwort, die gelöscht wurde . Und die akzeptierte Antwort kam nach meiner. Ich stimme zu, dass argmax besser ist als meine Antwort.

Wäre es nicht besser lesbar/intuitiv zu machen?

numpy.nonzero(a.max() == a)
(array([1]), array([0]))

Oder,

numpy.argwhere(a.max() == a)
4
otterb

Sie können einfach eine Funktion schreiben (die nur in 2d funktioniert): 

def argmax_2d(matrix):
    maxN = np.argmax(matrix)
    (xD,yD) = matrix.shape
    if maxN >= xD:
        x = maxN//xD
        y = maxN % xD
    else:
        y = maxN
        x = 0
    return (x,y)
0
iFederx