我有一个数据,实际上是 256 x 256 矩阵形式的图像。我想选择点的邻域并将其转换为向量。然后应用一些聚类算法。我是 R 新手,需要一些代码方面的帮助。我创建了一个玩具数据集来展示我想做的事情。
d<- matrix(rbinom(8*8,1,0.5),8,8)
d
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
[1,] 0 0 1 0 0 0 0 1
[2,] 1 1 1 0 1 1 1 1
[3,] 1 1 1 1 0 1 1 1
[4,] 0 0 1 1 1 1 1 0
[5,] 0 0 1 0 0 1 1 1
[6,] 1 0 0 0 0 0 1 0
[7,] 0 0 1 1 0 1 1 0
[8,] 1 1 0 1 1 0 1 0
从点 d[2,2] 开始,我想选择其周围 8 个点的邻域并将其转换为向量。因此对于 d[2,2] 这些点将是前 3 个 d[1,1],d[1,2],d[1,3],相邻左侧 d[2,1] 相邻右侧 d[2,3 ] 和底部 3 d[3,1]、d[3,2] 和 d[3,3]。如下:
[,1] [,2] [,3]
[1,] 0 0 1
[2,] 1 1 1
[3,] 1 1 1
现在将其转换为 R^9 中的向量,即 v1=(0,0,1,1,1,1,1,1,1)。然后,我想对不在矩阵边界上的所有点(即第一行和最后一行以及第一列和最后一列)执行此操作。我不知道如何继续,将不胜感激任何帮助。提前致谢。
最佳答案
您可以继续使用嵌套的 for
循环:
ddim <- dim(d) - 1
vect <- list()
for(i in seq(ddim[1])[-1]) {
for(j in seq(ddim[2])[-1]) {
vect <- c(vect, list(c(d[(i-1):(i+1), (j-1):(j+1)])))
}
}
可能有优化的解决方案(嵌套 for 循环很糟糕),但如果您的数据负担不太重,那么这是可行的。
关于r - 选择点的邻域并将其转换为向量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35416472/