有效地找到点 P 一定距离内的所有 (x,y,z) 点

计算科学 Python 计算物理学 计算几何
2021-11-26 13:33:59

我正在使用 Python,并且我有一个 Pandas 数据框,其中包含数十万(如果不是数百万)(x,y,z)坐标。我正在寻找一种有效的方法来索引原始数据帧,以便我只剩下在给定点一定距离内的条目P这不一定在坐标集中。

最简单但肯定最昂贵的方法是在每个向量之间构建一个向量(x,y,z)点和点P,取范数,只保留那些在截止距离内的。不过,对于数百万点,因为我必须这样做几十次,这似乎非常低效。

什么是最佳但仍然有些直观的方法来做到这一点?

2个回答

您可以使用Morton 键控对坐标位置进行排序,方法是将坐标位置分箱为特定大小的立方体d. 这是一O(NlogN)手术。然后,给定任意点 P,你可以使用它的 Morton 键只搜索一小部分(O(1))附近的盒子,以您的距离标准为界。每个框的搜索是O(logN).

您可以使用任何数据结构进行最近邻搜索有很多可能性,有不同的权衡。您可以权衡空间与查询时间与使用新点更新数据结构的效率。具体来说,您的问题是fixed-radius near neighbor search大多数最近邻搜索的数据结构都支持这种查询。