Smoothing a 2D matrix with rollmean, filter, rollapply or other R facilities by moving average sliding window method

混江龙づ霸主 提交于 2019-12-06 07:58:24
Paulo E. Cardoso

I'm not sure I got the idea but I think it could be approached with raster::focal?. See this post

library(raster)
x <- matrix(c(1,2,3,4,5,6,7,8,9),ncol=3)
x
     [,1] [,2] [,3]
[1,]    1    4    7
[2,]    2    5    8
[3,]    3    6    9

r <- raster(x) # convert to rasterLayer
## sliding a 3x3 window
agg <- as.matrix(focal(r, matrix(1, 3, 3), mean, pad = T, padValue = 0))
agg

         [,1]     [,2]     [,3]
[1,] 1.333333 3.000000 2.666667
[2,] 2.333333 5.000000 4.333333
[3,] 1.777778 3.666667 3.111111

Running on your example

x2 <- mat.pad(X=x, 3)
r2 <- raster(x2)
as.matrix(focal(r2, matrix(1, 3, 3), mean, pad = T, padValue = 0))
      [,1] [,2]      [,3]      [,4]     [,5]     [,6]      [,7] [,8] [,9]
 [1,]    0    0 0.0000000 0.0000000 0.000000 0.000000 0.0000000    0    0
 [2,]    0    0 0.0000000 0.0000000 0.000000 0.000000 0.0000000    0    0
 [3,]    0    0 0.1111111 0.5555556 1.333333 1.222222 0.7777778    0    0
 [4,]    0    0 0.3333333 1.3333333 3.000000 2.666667 1.6666667    0    0
 [5,]    0    0 0.6666667 2.3333333 5.000000 4.333333 2.6666667    0    0
 [6,]    0    0 0.5555556 1.7777778 3.666667 3.111111 1.8888889    0    0
 [7,]    0    0 0.3333333 1.0000000 2.000000 1.666667 1.0000000    0    0
 [8,]    0    0 0.0000000 0.0000000 0.000000 0.000000 0.0000000    0    0
 [9,]    0    0 0.0000000 0.0000000 0.000000 0.000000 0.0000000    0    0
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!