我有一个大约 3000 个点的空间数据框。我想生成一个矩阵,为每个点提供 k 个(在本例中为 30 个)最近邻。
我可以使用循环来做到这一点,但我觉得应该有一种我不知道的空间点数据框类的优雅和最佳方式。
我有一个大约 3000 个点的空间数据框。我想生成一个矩阵,为每个点提供 k 个(在本例中为 30 个)最近邻。
我可以使用循环来做到这一点,但我觉得应该有一种我不知道的空间点数据框类的优雅和最佳方式。
可能最快的是使用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