【问题标题】:For each element in a matrix, find the sum of all of its neighbors对于矩阵中的每个元素,找到其所有邻居的总和
【发布时间】:2014-03-22 03:00:58
【问题描述】:

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

例子:

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

而预期的结果是:

> result
     [,1] [,2] [,3]
[1,]    6    9    8
[2,]   13   20   17
[3,]   12   21   14

在不使用循环的情况下,我可以在 R 中做到这一点的最简单方法是什么?

【问题讨论】:

    标签: r matrix


    【解决方案1】:

    一种方法是与每一边的邻居制作矩阵并将它们相加。

    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
    

    【讨论】:

      【解决方案2】:

      这是一种方法。我不会说它是最简单的,但它确实避免了循环。

      m <- matrix(1:16, 4, 4, byrow=TRUE)
      
      result <- array(sapply(seq_along(m), function(i) {
        ind <- which(col(m) == col(m)[i] & abs(row(m)[i] - row(m)) == 1 | 
                       row(m) == row(m)[i] & abs(col(m)[i] - col(m)) == 1)
        sum(m[ind])
      }), dim(m))
      
      
      result
      
           [,1] [,2] [,3] [,4]
      [1,]    7   10   13   11
      [2,]   16   24   28   23
      [3,]   28   40   44   35
      [4,]   23   38   41   27
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-05-26
        • 1970-01-01
        • 1970-01-01
        • 2018-08-19
        • 1970-01-01
        相关资源
        最近更新 更多