(Nach dem Lesen des Kommentars) Ich glaube, die argmax()Methode würde auch für mehrdimensionale Arrays funktionieren. Die verknüpfte Dokumentation gibt ein Beispiel dafür:
(bearbeiten) Ich bezog mich auf eine alte Antwort, die gelöscht worden war . Und die akzeptierte Antwort kam nach meiner. Ich stimme zu, das argmaxist besser als meine Antwort.
Wäre es nicht lesbarer / intuitiver, dies zu tun?
numpy.nonzero(a.max() == a)
(array([1]), array([0]))
Unnötig langsam, weil Sie das Maximum berechnen und es dann mit allen vergleichen. unravel_index (a.argmax (), a.shape).
Peter
Ich habe dafür gestimmt, weil es nichts über die Anzahl der Vorkommen von a.max () in a voraussetzt. Während a.argmax () das "erste" Vorkommen zurückgibt (was im Fall eines mehrdimensionalen Arrays schlecht definiert ist, da es von der Wahl des Durchquerungspfads abhängt). docs.scipy.org/doc/numpy/reference/generated/… Ich denke auch, dass np.where () eine natürlichere / lesbarere Wahl ist als np.nonzero ().
FizxMike
2
Sie können einfach eine Funktion schreiben (die nur in 2d funktioniert):
defargmax_2d(matrix):
maxN = np.argmax(matrix)
(xD,yD) = matrix.shape
if maxN >= xD:
x = maxN//xD
y = maxN % xD
else:
y = maxN
x = 0return (x,y)
Antworten:
Die
argmax()
Methode sollte helfen.Aktualisieren
(Nach dem Lesen des Kommentars) Ich glaube, die
argmax()
Methode würde auch für mehrdimensionale Arrays funktionieren. Die verknüpfte Dokumentation gibt ein Beispiel dafür:>>> a = array([[10,50,30],[60,20,40]]) >>> maxindex = a.argmax() >>> maxindex 3
Update 2
(Dank KennyTMs Kommentar) Sie können
unravel_index(a.argmax(), a.shape)
den Index als Tupel abrufen :>>> from numpy import unravel_index >>> unravel_index(a.argmax(), a.shape) (1, 0)
quelle
unravel_index(a.argmax(), a.shape)
diese Option , um den Index als Tupel abzurufen.(bearbeiten) Ich bezog mich auf eine alte Antwort, die gelöscht worden war . Und die akzeptierte Antwort kam nach meiner. Ich stimme zu, das
argmax
ist besser als meine Antwort.Wäre es nicht lesbarer / intuitiver, dies zu tun?
numpy.nonzero(a.max() == a) (array([1]), array([0]))
Oder,
quelle
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)
quelle
Eine alternative Möglichkeit ist die Veränderung
numpy
Arraylist
und die Verwendungmax
undindex
Methoden:List = np.array([34, 7, 33, 10, 89, 22, -5]) _max = List.tolist().index(max(List)) _max >>> 4
quelle