Python: Index einer Numpy Matrix finden?


10.01.2020, 15:19

Meine Loesung sieht jetzt so aus:

snr_list = []

for i in range(0,6):
    max_snr = max(snr[:, i])
    
    max_snr_index = np.where(snr == max_snr)

    snr_list.append(np.mean(snr[int(max_snr_index[0])-10:int(max_snr_index[0])+10, i]))

Das es theoretisch mehrere Maximalwerte geben koennte, und ich jetzt immer nur den ersten nehme ist fuer mein Programm nicht schlimm.

1 Antwort

Vom Fragesteller als hilfreich ausgezeichnet

Also den Maximalwert selbst findest du ganz einfach über

np.max(snr)

Edit: Habe gerade gelesen, dass du den Maximalwert für jede Zeile suchst! In dem Fall ist es super einfach:

k = np.argmax(snr, axis=1)

k ist dann ein Array, das für jeden Eintrag den Index des höchsten Wert pro Zeile ausgibt. Setzt du axis=0, wäre es der höchste Wert pro Spalte.

Solltest du einmal die Koordinaten des höchsten Werts der ganzen Matrix wissen wollen, lies die Antwort, die ich zuerst geschrieben hatte:

Jetzt sollte man unterscheiden, ob es möglich ist, dass der Maximalwert öfter als einmal vorkommt. Falls ja und es dir egal ist, oder falls der Wert sicher nur einmal drin ist, funktioniert es folgendermaßen am einfachsten:

i,j = np.unravel_index(snr.argmax(), snr.shape)

wobei i die entsprechende Zeile und j die Spalte ist (snr[i,j] entspricht np.max(snr))

Wenn in deiner Matrix der Maximalwert zweimal oder öfter vorkommt, entsprechen i und j dem ersten Treffer bei der Suche.

Eine Variante, in der du ALLE Treffer des Maximums bekommst (und damit eine höherwertige Lösung) ist:

ii, jj = np.where(snr == snr.max())

ii un jj sind jeweils 1D-Arrays mit den Koordinaten, die zum Maximum führen. Wertepaare sind dann jeweils ii[0] und jj[0], ii[1] und jj[1] etc.

Wenn du drei Dimensonen hast, wäre es entsprechend i, j, k = ... (usw).

Woher ich das weiß:Hobby
Jdoue 
Fragesteller
 10.01.2020, 15:17

Hab es vorhin sogar selbst geschafft. Trotzdem vielen Dank!

1