Ich habe eine N-dimensionale Matrix, die die Werte für eine Funktion mit N Parametern enthält. Jeder Parameter hat eine diskrete Anzahl von Werten. Ich muss die Funktion über alle Parameter bis auf einen maximieren, was zu einem eindimensionalen Vektor der Größe führt, der gleich der Anzahl der Werte des nicht maximierten Parameters ist. Ich muss auch speichern, welche Werte von den anderen Parametern genommen werden.Erhalte Indizes von numpy.argmax Elementen über eine Achse
Dazu wollte ich iterativ numpy.max
über verschiedene Achsen anwenden, um die Dimensionalität der Matrix zu reduzieren, um zu finden, was ich brauche. Der endgültige Vektor wird dann nur von dem Parameter abhängen, den ich weggelassen habe.
Ich habe jedoch Probleme, die ursprünglichen Indizes der letzten Elemente zu finden (die die Informationen über die Werte enthalten, die von den anderen Parametern genommen werden). Ich über die Verwendung von numpy.argmax
in der gleichen Weise wie numpy.max
, aber ich kann nicht die ursprünglichen Indizes zurück erhalten.
Ein Beispiel dafür, was ich versuche:
x = [[[1,2],[0,1]],[[3,4],[6,7]]]
args = np.argmax(x, 0)
Das gibt
[[1 1]
[1 1]]
was bedeutet, dass argmax die Elemente auswählt (2,1,4,7) innerhalb der ursprünglichen Matrix. Aber wie bekommt man ihre Indizes? Ich versuchte unravel_index
, mit der args
direkt als Index für die Matrix x
, eine Reihe von Funktionen von numpy Index ohne Erfolg.
Die Verwendung von numpy.where
ist keine Lösung, da die Eingabematrix im Inneren gleiche Werte haben kann, so dass ich nicht von verschiedenen Originalwerten unterscheiden könnte.