Я новичок на этом сайте. Мне было интересно, есть ли у кого-нибудь опыт поворота списка координат сетки (показанного в примере кода ниже как 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)
.) - person Vincent Zoonekynd   schedule 18.04.2013