如何生成空间数据帧的k近邻矩阵?

发布于 2025-01-04 22:55:45 字数 120 浏览 3 评论 0原文

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

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

I have a spatial dataframe with about 3000 points. I want to generate a matrix that provides the k (in this case 30) nearest neighbors for each point.

I can do it using a loop but i feel that there should be an elegant and optimal way for spatial points dataframe class that i do not know of.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

失与倦" 2025-01-11 22:55:45

最快的可能是使用 RANN 包 - 假设您有 xy

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

Probably the fastest is to use RANN package - assuming you have x and y:

library(RANN)
m <- as.matrix(nn(data.frame(x=x, y=y, z=rep(0,length(x))), p=30)$nn.idx)

gives you a 3000 x 30 matrix of closest neighbors. It is several orders of magnitude faster than a naive quadratic search.

Edit: Just for completeness, it doesn't matter which ANN frontend you pick, with FNN (suggested by Spacedman) this would be

library(FNN)
m <- get.knn(data.frame(x=x, y=y), 30)$nn.index
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文