我试图计算阈值为4的两个元组列表的欧几里德距离。如果阈值小于特定值,则递增计数器。每个元组是点的x,y,z坐标。不管怎样,我能把列表1和列表2的比较降低一点吗。。在
X = [ (1,2,3),(2,3,4), (4,5,6) ]
Y = [ (1,2,2) , (3,4,5),(6,7,8) ]
from math import sqrt
dist_X = [ sqrt((p[0] - 0)**2 + (p[1] - 0)**2 + (p[2] - 0)**2) for p in X]
dist_Y = [ sqrt((p[0] - 0)**2 + (p[1] - 0)**2 + (p[2] - 0)**2) for p in Y]
for x in dist_X:
print (x , [ i for i,y in enumerate(dist_Y) if abs(x-y) <= 4])
我想先计算原点(0,0,0)上每个点的欧几里德距离,这样两个列表现在都包含了彼此接近的点,但它不起作用,因为它是一个标量值。。我走的方向对吗?在
编辑
^{pr2}$在这里,列表1的每个元素都与列表2中的每个元素进行比较。。我想知道是否有一种方法可以最大限度地减少比较给定的点(x,y,z)?在
一种有时可以加快速度的预计算是kd-trees。我运行了一个针对暴力的快速测试,发现对于更大的列表,它们可以更快一些:
代码:
^{pr2}$把这个画出来看看它看起来怎么样。与原点的距离大致相同的点是,它们之间必须很接近,这里有三角形不等式。例如,比较点(0,10),(0,11)和(-8,-6)。他们都是10-11个单位的来源,但最后一个单位远不及其他两个单位。在
如果你想知道两个点是否彼此靠近,你需要计算这两个点之间的距离,而不是到任意第三个点的距离。这个问题的复杂性是二次的,而不是线性的。在
相关问题 更多 >
编程相关推荐