gpt4 book ai didi

r - 识别二进制矩阵中与 1 相邻的所有元素

转载 作者:行者123 更新时间:2023-12-04 12:14:58 25 4
gpt4 key购买 nike

我正在尝试创建一个函数,其中在矩阵中的每个时间步,与 1 相邻和对角线的单元格也变为 1。例如,像这样:

输入

0 0 0 0 0
0 1 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0

第一个时间步后的输出

1 1 1 0 0
1 1 1 0 0
1 1 1 0 0
0 0 0 0 0
0 0 0 0 0

到目前为止,我有这个:

A = matrix(0,nrow=5,ncol=5)

A[2,2]=1


for (i in 1:5){
for (j in 1:5){
if ((A[i,j]==1)) {
A[,(j+1)]=1
A[,(j-1)]=1
A[(i+1),]=1
A[(i-1),]=1
A[(i+1),(j+1)]=1
A[(i+1),(j-1)]=1
A[(i-1),(j+1)]=1
A[(i-1),(j-1)]=1
}
}
}

我不太确定如何在其中集成一个函数,所以我可以得到我想要的任何时间步长的结果矩阵。

最佳答案

您可以确定某个位是否在矩阵中设置,或者当它在 8 个合法方向(右、左、上、下、右上、右下、左下、左上):

spread <- function(X) unname(X |
rbind(F, head(X, -1)) |
rbind(tail(X, -1), F) |
cbind(F, X[,-ncol(X)]) |
cbind(X[,-1], F) |
cbind(F, rbind(F, head(X, -1))[,-ncol(X)]) |
cbind(rbind(F, head(X, -1))[,-1], F) |
cbind(F, rbind(tail(X, -1), F)[,-ncol(X)]) |
cbind(rbind(tail(X, -1), F)[,-1], F)) * 1
X <- matrix(rep(c(0, 1, 0), c(6, 1, 18)), nrow=5)
spread(X)
# [,1] [,2] [,3] [,4] [,5]
# [1,] 1 1 1 0 0
# [2,] 1 1 1 0 0
# [3,] 1 1 1 0 0
# [4,] 0 0 0 0 0
# [5,] 0 0 0 0 0

您可以重复应用该函数以进一步传播数据:

spread(spread(X))
# [,1] [,2] [,3] [,4] [,5]
# [1,] 1 1 1 1 0
# [2,] 1 1 1 1 0
# [3,] 1 1 1 1 0
# [4,] 1 1 1 1 0
# [5,] 0 0 0 0 0
spread(spread(spread(X)))
# [,1] [,2] [,3] [,4] [,5]
# [1,] 1 1 1 1 1
# [2,] 1 1 1 1 1
# [3,] 1 1 1 1 1
# [4,] 1 1 1 1 1
# [5,] 1 1 1 1 1

关于r - 识别二进制矩阵中与 1 相邻的所有元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35161864/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com