3
私は約3000ポイントの空間データフレームを持っています。私は、各点についてk(この場合は30)の最も近い近傍を提供する行列を生成したいと思います。空間データフレームのためのk最近傍の行列を生成する方法は?
私はループを使用してそれを行うことができますが、わかりませんが空間ポイントデータフレームクラスのためのエレガントで最適な方法があるはずです。
私は約3000ポイントの空間データフレームを持っています。私は、各点についてk(この場合は30)の最も近い近傍を提供する行列を生成したいと思います。空間データフレームのためのk最近傍の行列を生成する方法は?
私はループを使用してそれを行うことができますが、わかりませんが空間ポイントデータフレームクラスのためのエレガントで最適な方法があるはずです。
おそらく最速はRANN
パッケージを使用することです - あなたはx
とy
を持っていると仮定すると:
library(RANN)
m <- as.matrix(nn(data.frame(x=x, y=y, z=rep(0,length(x))), p=30)$nn.idx)
はあなたの最も近い隣人の3000×30行列を与えます。素朴な二次探索よりも数桁速いです。
編集:ただ、完全を期すために、それはあなたが(Spacedmanによって提案)FNN
で、これはそれがパッケージからget.knnする比較どのよう
library(FNN)
m <- get.knn(data.frame(x=x, y=y), 30)$nn.index
されるだろう迎えたANNのフロントエンドは問題ではありません。 FNN? – Spacedman
おそらく両方ともANNライブラリを使用しているのと同じです。小さなサイズのためにここでは関係ありません。上記のFNNは 'get.knn(data.frame(x = x、y = y)、30)$ nn.index'になりますので、好きなものを選んでください:)結果は同じです。 –