R: Apply FUN to kxk subsections of array

Язык - R.

У меня есть матрица nxm, и я хотел бы разбить ее на 3x3 части и вычислить среднее (или любую функцию) в каждой из них. (Если останется часть, которая не 3x3, то использовать только то, что осталось).

Я уверен, что есть прикладнойспособ сделать это - он у меня на кончике языка - но мой мозг сейчас меня подводит. Полагаю, это немного похоже на вопрос о перемещении окна, только я хочу, чтобы окна не перекрывались (так проще).

Может ли кто-нибудь вспомнить встроенную функцию, которая это делает? Или векторный способ?

Вот моя зацикленная версия:

winSize <- 3
mat <- matrix(runif(6*11),nrow=6,ncol=11)
nr <- nrow(mat)
nc <- ncol(mat)
outMat <- matrix(NA,nrow=ceiling(nr/winSize),
                    ncol=ceiling(nc/winSize))
FUN <- mean
for ( i in seq(1,nr,by=winSize) ) {
    for ( j in seq(1,nc,by=winSize) ) {
        # work out mean in 3x3 window, fancy footwork
        #  with pmin just to make sure we don't go out of bounds
        outMat[ ceiling(i/winSize), ceiling(j/winSize) ] <-
               FUN(mat[ pmin(i-1 + 1:winSize,nr), pmin(j-1 + 1:winSize,nc)])
    }
}

ура.

5
задан mathematical.coffee 7 February 2012 в 06:26
поделиться