我有两个数组,数组 A 有大约 1M 行,数组 B 有大约 400K 行。每个都包含一个点的坐标。对于数组 A 中的每个点,我需要找出数组 B 中有多少点在它的一定距离内。我如何避免天真地将所有事物与所有事物进行比较?根据它一开始的速度,在我的机器上天真地运行需要 10 天以上。这需要嵌套循环,但数组太大而无法构造 distance matrix (400G 条目!)
我认为方法是仅针对每个 A 坐标检查一组有限的 B 坐标。但是,我还没有确定一种简单的方法来做到这一点。也就是说,进行不需要检查 B 中所有值的选择的最简单/最快捷的方法是什么(这与我试图避免的任务完全相同)?
编辑:我应该提到这些不是二维(或 nD)笛卡尔,而是球面(纬度/经度),距离是大圆距离。
请您参考如下方法:
我现在无法给出完整的答案,但可以提供一些帮助您入门的提示。将 B 中的点组织在 kd-tree 中会更有效率。您可以使用类 scipy.spatial.KDTree要轻松做到这一点,您可以在此类上使用 query() 方法来请求给定距离内的点。
