Wie kann ich bei einer numerischen 2D-Höhenkartenmatrix in R alle lokalen Maxima finden?

Ich habe eine R-Matrix mit nichtnegativen numerischen Werten. Die Matrix ist effektiv eine 2D-Höhenkarte, und ich möchte alle lokalen Maxima in dieser Matrix finden. Bei "flachen" Peaks, bei denen benachbarte Elemente gleich sind (und zusammen ein lokales Maximum darstellen), ist es mir egal, was passiert, solange ich mindestens eine Koordinate in jedem "flachen" Bereich erhalte.

Gibt es irgendwelche Funktionen, um dies effizient zu tun? Natürlich könnte ich die Schleife manuell schreiben, um jedes Element einzeln durchzugehen und zu testen, aber das wäre in R ziemlich langsam. Ich muss dies für ungefähr eine Million Matrizen tun, mit einem Durchschnitt von ungefähr 884 Elementen pro Matrix.

Im Idealfall gibt es eine Funktion, die die Matrix als Eingabe verwendet und eine 2-Spalten-Matrix mit Spalte 1 als Zeilenkoordinaten, Spalte 2 als Spaltenkoordinaten und einer Zeile für jedes lokale Maximum in der Matrix zurückgibt.

Lokale Maxima an den Rändern der Matrix sind zulässig. Bereiche außerhalb der Matrix können als Nullhöhe behandelt werden.

Reproduzierbare Beispielmatrix zur Verwendung:

set.seed(5)
msize <- 20 # Change this to whatever you like
x <- matrix(data=abs(rnorm(msize*2)), nrow=msize, ncol=msize)

Antworten auf die Frage(1)

Ihre Antwort auf die Frage