选择一个点的邻域并将其转换为向量
Posted
技术标签:
【中文标题】选择一个点的邻域并将其转换为向量【英文标题】:select a neighborhood of points and convert it to a vector 【发布时间】:2016-05-26 18:46:55 【问题描述】:我的数据实际上是 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)。然后,我想对不在矩阵边界上的所有点(即第一行和最后一行以及第一列和最后一列)执行此操作。我不知道如何继续,并会感谢任何帮助。提前致谢。
【问题讨论】:
【参考方案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 循环不好),但如果您没有太多数据负担,这很有效。
【讨论】:
谢谢。但我想将 vect 存储在矩阵中。我该怎么做? 你可以加do.call(cbind, vect)
以上是关于选择一个点的邻域并将其转换为向量的主要内容,如果未能解决你的问题,请参考以下文章