对于矩阵中的每个元素,找到其所有邻居的总和

Gou*_*ham 5 r matrix

给定一个矩阵,我想找到每个元素的邻居之和(所以结果是一个矩阵).如果存在(不考虑对角线元素),则邻居是给定元素上方,下方和旁边的值.

例:

> z = matrix(1:9, 3, 3, byrow=T)
> z
     [,1] [,2] [,3]
[1,]    1    2    3
[2,]    4    5    6
[3,]    7    8    9
Run Code Online (Sandbox Code Playgroud)

预期的结果是:

> result
     [,1] [,2] [,3]
[1,]    6    9    8
[2,]   13   20   17
[3,]   12   21   14
Run Code Online (Sandbox Code Playgroud)

在不使用循环的情况下,我可以在R中执行此操作的最简单方法是什么?

Aar*_*ica 6

一种方法是在每一侧与邻居制作矩阵并将它们加在一起.

rbind(z[-1,],0) + rbind(0,z[-nrow(z),]) + cbind(z[,-1],0) + cbind(0,z[,-ncol(z)])
##      [,1] [,2] [,3]
## [1,]    6    9    8
## [2,]   13   20   17
## [3,]   12   21   14
Run Code Online (Sandbox Code Playgroud)