这里有几个选项.
直截了当的方法是使用aggregate()从光栅包:
m <- matrix(1:10000, ncol=100)
library(raster)
r <- raster(m)
as.matrix(aggregate(r, 5))
## aggregate() also supports non-square aggregation windows
as.matrix(aggregate(r, c(20, 50)))
# [,1] [,2] [,3] [,4] [,5]
# [1,] 975.5 2975.5 4975.5 6975.5 8975.5
# [2,] 1025.5 3025.5 5025.5 7025.5 9025.5
Run Code Online (Sandbox Code Playgroud)
对于更优雅或模糊的方法(取决于您的观点),使用几个矩阵乘法:
m <- matrix(1:10000, ncol=100)
mm <- suppressWarnings(matrix(rep(c(1, rep(0, 20)), each=5), ncol=20, nrow=100))
(t(mm) %*% m %*% mm)/25
Run Code Online (Sandbox Code Playgroud)