3

このサイトは初めてです。誰かがグリッド座標のリストを回転させた経験があるかどうか疑問に思っていました (以下のコード例では 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 への変換を試みましたが、そこから移動しましたが、隣接行列が正しくなりません。お時間をいただきありがとうございました。

4

1 に答える 1