2012-02-10 4 views
3

私は約3000ポイントの空間データフレームを持っています。私は、各点についてk(この場合は30)の最も近い近傍を提供する行列を生成したいと思います。空間データフレームのためのk最近傍の行列を生成する方法は?

私はループを使用してそれを行うことができますが、わかりませんが空間ポイントデータフレームクラスのためのエレガントで最適な方法があるはずです。

答えて

4

おそらく最速はRANNパッケージを使用することです - あなたはxyを持っていると仮定すると:

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 
+0

されるだろう迎えたANNのフロントエンドは問題ではありません。 FNN? – Spacedman

+0

おそらく両方ともANNライブラリを使用しているのと同じです。小さなサイズのためにここでは関係ありません。上記のFNNは 'get.knn(data.frame(x = x、y = y)、30)$ nn.index'になりますので、好きなものを選んでください:)結果は同じです。 –

関連する問題