查找3D欧几里德空间中的10个最近点,用于500万元素目录中的每个元素

时间:2017-09-12 18:10:28

标签: python sorting machine-learning distance euclidean-distance

假设我有一个500万点的目录,其x,y,z位置在3D空间中。对于这500万个点中的每一个,我想找到最接近它的10个点(直接的3D欧几里德距离公式)。

在python中,如果我对表中的每个元素执行一个简单的for循环,并且在for循环中执行数组操作(不是第二个for循环!)来查找当前点和所有其他点之间的距离目录,这将需要数天/周。我尝试了一些涉及排序和计算点之间距离的东西,只有+/-每个表元素周围几千行,但这仍然需要数天。

在python中执行此操作的更快捷方法是什么?有没有办法将for循环转换为某种矢量化操作?任何机器学习技巧(例如,在scikit-learn中)是否有帮助?或者以某种方式并行化代码帮助?

1 个答案:

答案 0 :(得分:1)

我在R中使用了一个名为RANN的打包,它找到了“近似”的最近邻居。我在几分钟内用25 M观察值和8个维度运行它,结果对我的用例来说已经足够了。

我不确定我使用的软件包是否有Python版本,但我发现此链接有很多替代方法:Benchmark of ANN Libraries

Benchmark of ANN Libraries