könnten Sie verwenden argmax
-
A.shape[1] - 1 - (Num > A)[:,::-1].argmax(1)
Alternativ mit cumsum
und argmax
-
(Num > A).cumsum(1).argmax(1)
Erläuterung: Mit np.max(np.where(..)
, suchen wir im Grunde das letzte Vorkommen der Spiele entlang jeder Reihe zu bekommen auf den Vergleich.
Für das gleiche können wir argmax
verwenden. Aber argmax
auf einem booleschen Array gibt uns das erste Vorkommen und nicht das letzte. Ein Trick besteht also darin, den Vergleich durchzuführen und die Spalten mit [:,::-1]
zu spiegeln und dann argmax
zu verwenden. Die Spaltenindizes werden dann durch die Anzahl der Spalten in dem Array subtrahiert, um sie auf die ursprüngliche Reihenfolge zurückzuführen.
Auf dem zweiten Ansatz, es ist sehr ähnlich zu einem related post
und deshalb von ihm zitiert:
Eine der Anwendungen von argmax ist ID des ersten Auftretens des maximalen Elements entlang einer Achse in einer Reihe zu bekommen. So erhalten wir die Cumsum entlang der Zeilen und erhalten die erste maximale ID, die das letzte Nicht-Null-Element darstellt. Der Grund dafür ist, dass Cumsum auf den übrig gebliebenen Elementen den Summenwert nach dem letzten Nicht-Null-Element nicht erhöht.
Was bedeutet Folgendes: A [:, :: - 1]? – Zanam
@Zanam Hinzugefügt einige Kommentare dort. – Divakar
Ich mag den "Cumsum" one :) interessanten Ansatz, und wie üblich, ausgezeichnete Erklärung von beiden. –