假设你有一个向量列表 - 例如:
myListOfVectors=[(10,2),(0,5),(3,2),(8,2),(9,5),(10,5]
将这些向量从小到大排序的最快方法是什么(假设距离原点的最小距离是列表的第一个成员,第二个最小距离是第二个成员等...)?
答案 0 :(得分:4)
def sqdist(vector)
return sum(x*x for x in vector)
myListOfVectors.sort(key=sqdist)
结果:
>>> myListOfVectors
[(3, 2), (0, 5), (8, 2), (10, 2), (9, 5), (10, 5)]
我使用平方距离,因为你实际上并没有在任何地方使用距离,计算平方根的代价非常高。
答案 1 :(得分:1)
假设你在谈论欧几里德距起源的距离,我会做什么:
from math import sqrt
def euclidean_distance(v):
return sqrt(sum(x**2 for x in v))
myListOfVectors = [(10,2),(0,5),(3,2),(8,2),(9,5),(10,5)]
sorted(myListOfVectors, key=euclidean_distance)
返回
[(3, 2), (0, 5), (8, 2), (10, 2), (9, 5), (10, 5)]
这适用于任何n维向量集。