Найти максимум в движущемся подмножестве в большом кадре данных - PullRequest
0 голосов
/ 07 июня 2018

У меня большой фрейм данных (1000x1000), и я хочу найти все максимумы в подмножествах.

mat = diag(10-abs(-10:10))  # test matrix

Я пытался использовать цикл for для следующих 3 шагов, но он не работал:

  1. извлечение последовательных подмножеств 3x3,
  2. найдите максимум внутри каждого,
  3. , затем измените все значения подмножества на 0, а максимум на 1.

Код

for (x in (1+2):(nrow(mat)-2)){ 
    for (y in (1+2):(ncol(mat)-2)){
        subset = mat[x:(x+2), y:(y+2)]
        wm = which.max(subset)
        mat[row(subset)[wm], col(subset)[wm]] == 1
    }}

Любой совет/ исправление приветствуется: -)

1 Ответ

0 голосов
/ 07 июня 2018

Может быть так:

set.seed(123)
m<-matrix(rnorm(100),ncol=10)
m.max<- matrix(0, ncol=ncol(m), nrow=nrow(m))
for(i in 2:(nrow(m)-1)){
  for(j in 2:(ncol(m)-1)){
    subset<-m[(i-1):(i+1),(j-1):(j+1)]
    idx <-which(subset == max(subset), arr.ind = TRUE)
    m.max[(i+idx[1]-2),(j+idx[2]-2)]<-1
  }
}
m.max

Обратите внимание, что на каждом шаге необязательно создается новая "1", поскольку максимум два перекрывающихся подмножества могут быть одной и той же записью.

...