Biorąc pod uwagę 2D numeryczną „mapę wysokości” w R, jak mogę znaleźć wszystkie lokalne maksima?

Mam macierz R z nieujemnymi wartościami liczbowymi. Macierz jest w rzeczywistości mapą wysokości 2D i chcę znaleźć wszystkie lokalne maksima w tej macierzy. W przypadku „płaskich” szczytów, gdzie sąsiadujące elementy są sobie równe (i są zbiorczo maksimum lokalne), nie obchodzi mnie, co się stanie, jeśli otrzymam co najmniej jedną współrzędną w każdym „płaskim” regionie.

Czy są jakieś funkcje, które umożliwiają to skutecznie? Oczywiście mógłbym napisać pętlę ręcznie, aby przejść i przetestować każdy element indywidualnie, ale robienie tego w R byłoby dość powolne. Muszę to zrobić dla około miliona macierzy, ze średnią około 884 elementów na macierz.

Idealnie byłoby, gdyby funkcja pobierała macierz jako dane wejściowe i zwraca 2-kolumnową macierz z kolumną 1 będącą współrzędnymi rzędu, kolumna 2 to współrzędne kolumny, a jeden wiersz dla każdego lokalnego maksimum w macierzy.

Dopuszczalne są lokalne maksima na krawędziach macierzy. Obszary poza macierzą można traktować jako mające zerową wysokość.

Powtarzalna przykładowa matryca do użycia:

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

questionAnswers(1)

yourAnswerToTheQuestion