【问题标题】:How to apply a function to each element of matrix considering the neighbouring cells考虑到相邻单元格,如何将函数应用于矩阵的每个元素
【发布时间】:2017-01-19 20:52:43
【问题描述】:

考虑到上下左右相邻单元格,我想对矩阵的每个元素应用一个函数:

a=1; b=3; c=8; d=2

m <- matrix(1:20, nrow=4, ncol=5)
mn <- matrix(NA, nrow=4, ncol=5)

for(i in 2:3){
  for(j in 2:4){
    mn[i,j] <- a*m[i-1,j]+b*m[i+1,j]+c*m[i,j-1]+d*m[i,j+1]
  }
}

是否有使用 sapply 或其他方法的替代方法?

【问题讨论】:

  • 一个小的简化:a &lt;- c(1, 3, 8, 2) 在顶部。然后,在循环中,mn[i,j] &lt;- sum(c(m[i-1,j], m[i+1,j], m[i,j-1], m[i,j+1]) * a).

标签: r


【解决方案1】:

您可以对矩阵的多个行和列进行子集化,如下所示:

.i = 2:3
.j = 2:4

mn[.i,.j] = a*m[.i-1,.j] + b*m[.i+1,.j] + c*m[.i,.j-1] + d*m[.i,.j+1]


> mn
#      [,1] [,2] [,3] [,4] [,5]
# [1,]   NA   NA   NA   NA   NA
# [2,]   NA   62  118  174   NA
# [3,]   NA   76  132  188   NA
# [4,]   NA   NA   NA   NA   NA

【讨论】:

    猜你喜欢
    • 2019-01-10
    • 2017-04-02
    • 1970-01-01
    • 1970-01-01
    • 2022-12-12
    • 2018-05-25
    • 1970-01-01
    • 1970-01-01
    • 2020-10-16
    相关资源
    最近更新 更多