이 사이트는 새로운 기능입니다. 누구든지 그리드 좌표 (df로 아래의 예제 코드에서 볼 수 있음) 목록을 돌려 본 경험이 있는지 궁금합니다. 아주 작은 데이터 세트에 대한 작업을 처리 할 수있는 함수를 작성했지만 데이터 세트의 크기가 커질수록 실행 시간이 기하 급수적으로 늘어납니다 (800 픽셀은 약 25 시간이 걸릴 것이라고 생각합니다). 중첩 된 for 루프 때문에 발생하지만 주위를 둘러 볼 방법을 모르겠습니다.R의 그리드 좌표에서 인접성 행렬을 만드는 방법?
## 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으로 변환을 시도하고 거기에서 갔지만 인접성 행렬을 올바르게 얻지는 못한다. 시간 내 주셔서 대단히 감사합니다.
result <- apply(df, 1, function(pt)
(pt["x"] == df$x & abs(pt["y"] - df$y) == 1) |
(abs(pt["x"] - df$x) == 1 & pt["y"] == df$y)
)
diag(result) <- 1
을 그리고 같은 대한 결과 loopiness를 방지하고 얻을 :
을 OP는 분명히 adjacency 행렬 의 정점이 이미지의 "on"픽셀 인 것을 원합니다 ('x'와'y'는 픽셀 좌표이고 예제에서는 7 픽셀입니다), 두 개 사이의 모서리를 가진 그들이 이웃이라면 픽셀 . 2 차원 눈금의 하위 그래프입니다. ( 이미지는 다음과 같이 복제 할 수 있습니다. –