【发布时间】:2024-01-06 07:28:01
【问题描述】:
我有两个点数组:list1 和 list1.shape = [N, 3] 和 list2 和 list2。形状 = [M, 3]。 N,M内:点的总数,(x,y,z)是3D中的3个坐标。
现在我想检查 list1 的每个点是否与 list2 的每个点都在 r 的距离内。执行此操作的一种自然方法是 for 循环:
for i in range(N):
for j in range(M):
if (list1[i, 0] - list2[j, 0])**2 + (list1[i, 1] - list2[j, 1])**2 + (list1[i, 2] - list2[j, 2])**2 < r**2:
''' Return 1 if list1[i] is within list2[j] '''
return True
else:
''' Return 0 if list1[i] is not within list2[j] '''
return False
但是速度太慢了。我可以做更有效的方法吗?
【问题讨论】:
-
可能k-d树是解决方案? en.wikipedia.org/wiki/K-d_tree
-
我尝试使用 scipy 的 KdTree,但速度并不快。
-
欧几里得距离矩阵的最佳解决方案在这个问题中:*.com/questions/3518574/…。用 list1 替换一个“数据”,用 list2 替换另一个
-
您的代码会多次覆盖
a[i],只有j==M-1的值才重要。您实际上需要它如何表现? -
抱歉弄错了,我修改了。
标签: python arrays performance for-loop euclidean-distance