矩阵横向扩展

Ali*_*Ali 3 r matrix scale

给定100x100矩阵,我们想要计算20x20矩阵,它的每个单元代表原始矩阵的5x5平方的平均值.

怎么做?(如果您对此操作有任何更好的名称,请评论重命名问题).

Jos*_*ien 5

这里有几个选项.

直截了当的方法是使用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)

  • 也许优雅,混淆,深奥.点也在这里. (2认同)