【发布时间】:2019-06-04 11:58:41
【问题描述】:
我有一个 numpy.ndarray 的 3d 点,即它的 np.shape 是 (4350,3) 和第二个 numpy.ndarray 的 3d 点的 np.shape (10510,3)。 现在我正在尝试找到正确的 python 包来尽快计算第一个数组中点的第二个数组中的最近邻居。
我在这里发现了一个非常相似的问题:find the k nearest neighbours of a point in 3d space with python numpy 但我不明白如何使用那里的解决方案来解决我的问题。
非常非常感谢您在这方面的帮助!
【问题讨论】:
-
这是一次性操作还是要在同一个集合中找到多个最近的邻居?我这样问是因为如果它是一个单一的操作,并且您实际上每次只在新集合上寻找 1 个点,那么一个简单的 1 次循环寻找最小平方距离就足够了,并且是最快的。
-
@Victor'Chris'Cabral 不,到目前为止我已经实现的是通过计算第二个集合的每个点的第一个集合的每个点的欧几里得距离来找到最近的邻居(4350 * 10510 = 45718500 次)并返回最近距离的点。但是所有这一切我都是在一个运行约 20 次的 while 循环中完成的,并且针对几个“第一”点集,所以这种天真的经典方法需要几个小时。
-
我肯定说错了。我现在看到了你的问题。
-
我建议从较小的集合中创建一个 kdtree,然后进行循环。 docs.scipy.org/doc/scipy-0.14.0/reference/generated/…
-
@Victor'Chris'Cabral 感谢您的链接和建议!我以前通读过该文档,但我不知道如何将其应用于我的问题(对不起,如果这应该从文档中清楚,我不太擅长编程)。你能给我一个例子,说明这对于我的问题(我的意思是,一般来说对于两个 3D 点集)是怎样的?
标签: python python-3.x numpy nearest-neighbor numpy-ndarray