我是这个网站的新手。我想知道是否有人有将网格坐标列表(在下面的示例代码中显示为df)转换的经验。我编写了一个可以处理非常小数据集的函数,但随着数据集大小的增加,运行时间呈指数级增长(我认为800像素需要大约25小时)。这是由于嵌套的for循环造成的,但我不知道如何解决。
## Dummy Data
x <- c(1,1,2,2,2,3,3)
y <- c(3,4,2,3,4,1,2)
df <- as.data.frame(cbind(x,y))
df
## Here's what it looks like as an image
a <- c(NA,NA,1,1)
b <- c(NA,1,1,1)
c <- c(1,1,NA,NA)
image <- cbind(a,b,c)
f <- function(m) t(m)[,nrow(m):1]
image(f(image))
## Here's my adjacency matrix function that's slowwwwww
adjacency.coordinates <- function(x,y) {
df <- as.data.frame(cbind(x,y))
colnames(df) = c("V1","V2")
df <- df[with(df,order(V1,V2)),]
adj.mat <- diag(1,dim(df)[1])
for (i in 1:dim(df)[1]) {
for (j in 1:dim(df)[1]) {
if((df[i,1]-df[j,1]==0)&(abs(df[i,2]-df[j,2])==1) | (df[i,2]-df[j,2]==0)&(abs(df[i,1]-df[j,1])==1)) {
adj.mat[i,j] = 1
}
}
}
return(adj.mat)
}
## Here's the adjacency matrix
adjacency.coordinates(x,y)
有没有一种方法可以在几千像素的坐标系上很好地完成此操作?我已经尝试将其转换为SpatialGridDataFrame,但无法正确获取邻接矩阵。非常感谢您的时间。
x
和y
是像素坐标;示例中有7个像素),如果两个像素相邻,则它们之间有一条边。这是二维网格的子图。(可以使用以下代码复制图像:im <- matrix(FALSE,5,5); im[cbind(x,y)] <- TRUE; image(im)
。) - Vincent Zoonekynd