import numpy as np
A = [(1, 1), (2, 1), (3, 1)]
B = [(2, 2), (3, 3)]
# compare each point in A to all points in B, return the shortest distance
for pt in A:
min_sq_dist = min( (pt[0] - t[0])**2 + (pt[1] - t[1])**2 for t in B )
print(np.sqrt(min_sq_dist))
from scipy.spatial import distance
A = [(1,1),(2,1),(3,1)]
B = [(2,2),(3,3)]
min_dist = []
for a in A:
dist = []
for b in B:
dist.append(distance.euclidean(a,b))
min_dist.append(min(dist))
>> min_dist
>> [1.4142135623730951, 1.0, 1.4142135623730951]
这取决于你所说的“有效”是什么意思。如果你有一个相当大的列表,并且你要做很多比较,你应该只寻找最小平方距离,它的计算速度要快得多,因为你避免了平方根运算。这是处理欧几里德距离时的标准技巧
如果最后需要实际的欧几里德距离,然后取平方根
考虑:
输出:
最大的区别是什么?上面的代码计算3个平方根。朴素的方法计算6(B)倍)
我找到了一个方法,我不知道是否有人能更有效地
下面是一个可能有帮助的示例代码:
我正在为此使用
scipy
库。也可以使用numpy.linalg.norm
。这种方法对你有用吗嗯
相关问题 更多 >
编程相关推荐