我想用各种性能说明来阐述简单的答案。 np.linalg.norm可能比您需要的更多:
dist=numpy.linalg.norm(a-b)
首先 - 此功能旨在处理列表并返回所有值,例如 比较中距离things到点数sqrt的距离:
sP=set(points)pA=point
distances=np.linalg.norm(sP-pA,ord=2,axis=1.)# 'distances' is a list
记住几件事:
Python函数调用很昂贵。
[Regular] Python不会缓存名称查找。
所以
defdistance(pointA,pointB):dist=np.linalg.norm(pointA-pointB)returndist
并不像看起来那样无辜。
>>>dis.dis(distance)20LOAD_GLOBAL0(np)2LOAD_ATTR1(linalg)4LOAD_ATTR2(norm)6LOAD_FAST0(pointA)8LOAD_FAST1(pointB)10BINARY_SUBTRACT12CALL_FUNCTION114STORE_FAST2(dist)316LOAD_FAST2(dist)18RETURN_VALUE
首先 - 每次调用它时,我们必须对“np”进行全局查找,对“linalg”进行范围查找,对“norm”进行范围查找,仅调用函数的开销可以等同于几十个python说明。
最后,我们浪费了两个操作来存储结果并重新加载它以便返回...
第一步改进:使查找更快,跳过商店
defdistance(pointA,pointB,_norm&