gpt4 book ai didi

r - R中的邻居函数

转载 作者:行者123 更新时间:2023-11-30 09:37:10 24 4
gpt4 key购买 nike

我有一个数据,实际上是 256 x 256 矩阵形式的图像。我想编写一个名为“get.nbhd”的函数,它为一个像素选择 4 个邻居并将其存储为向量。然后在需要时调用该函数。如果像素位于角点或边界上,则分别有 2 个和 3 个邻居。这是一个玩具数据集。因此,对于中间的任何像素 d[i,j],4 个邻居将是 {d[i-1,j],d[i+1,j],d[i,j+1],d[i ,j-1]}。对于 4 个角像素,2 个邻居将是 {d[i,j-1],[i+1,j]} ,{d[i,j+1],d[i+1,j]}, {d[i-1,j],d[i,j-1]}, {d[i-1,j],d[i,j+1]}。顶部和底部边框像素将具有 3 个邻居,即 {d[i-1,j],[i+1,j],d[i,j-1]}。如有任何帮助,我们将不胜感激。

    > x<- matrix(rbinom(8*8,1,0.5),8,8)
> x
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
[1,] 1 1 1 0 1 0 1 0
[2,] 1 1 0 1 0 1 1 1
[3,] 1 1 1 1 1 0 0 0
[4,] 1 1 1 0 1 1 1 1
[5,] 1 1 1 1 0 1 0 0
[6,] 1 1 1 0 0 1 1 1
[7,] 0 1 1 1 1 0 0 0
[8,] 0 1 0 0 0 1 1 0

最佳答案

此函数为您提供向量中 m[i, j] 的邻居:

get.nbhd <- function(m, i, j) {
# get indices
idx <- matrix(c(i-1, i+1, i, i, j, j, j+1, j-1), ncol = 2)
# set out of bound indices to 0
idx[idx[, 1] > nrow(m), 1] <- 0
idx[idx[, 2] > ncol(m), 2] <- 0
return (x[idx])
}

该函数受益于使用零作为索引的事实,不会给出错误,而只是不返回任何值。因此,太大的索引将设置为零。

举个例子,我使用了与您不同的矩阵,因为如果只有 1 和 0,则不容易检查结果的正确性。

x<- matrix(1:25,5,5)
x
## [,1] [,2] [,3] [,4] [,5]
## [1,] 1 6 11 16 21
## [2,] 2 7 12 17 22
## [3,] 3 8 13 18 23
## [4,] 4 9 14 19 24
## [5,] 5 10 15 20 25
get.nbhd(x, 2, 3)
## [1] 11 13 17 7
get.nbhd(x, 1, 5)
## [1] 22 16
get.nbhd(x, 5, 3)
## [1] 14 20 10

关于r - R中的邻居函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36073795/

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