非負の数値を持つR行列があります。行列は事実上2D高さマップであり、この行列内のすべての極大値を見つけたいと思います。隣接する要素が互いに等しい(そしてそれらは集合的に極大である)「フラット」ピークの場合、各「フラット」領域内で少なくとも1つの座標を取得する限り、何が起こるかは気になりません。
これを効率的に行うための機能はありますか?明らかに、ループを手動で記述して、すべての要素を個別に調べてテストすることもできますが、Rでそれを行うと非常に時間がかかります。これを約100万のマトリックスに対して行う必要があり、マトリックスあたりの平均要素数は約884です。
理想的には、行列を入力として受け取り、2列の行列を返す関数があります。列1は行の座標、列2は列の座標、行列の極大値ごとに1つの行です。
行列のエッジの極大値が許可されます。マトリックスの外側の領域は、高さがゼロとして扱うことができます。
使用する再現可能なサンプルマトリックス:
set.seed(5)
msize <- 20 # Change this to whatever you like
x <- matrix(data=abs(rnorm(msize*2)), nrow=msize, ncol=msize)