4

我有一个大约 3000 个点的空间数据框。我想生成一个矩阵,为每个点提供 k 个(在本例中为 30 个)最近邻。

我可以使用循环来做到这一点,但我觉得应该有一种我不知道的空间点数据框类的优雅和最佳方式。

4

1 回答 1

5

可能最快的是使用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 x 30 矩阵。它比简单的二次搜索快几个数量级。

编辑:为了完整起见,您选择哪个 ANN 前端并不重要,使用FNN(由 Spacedman 建议)这将是

library(FNN)
m <- get.knn(data.frame(x=x, y=y), 30)$nn.index
于 2012-02-10T04:43:20.983 回答