欧几里德点之间的距离

时间:2010-03-20 13:05:12

标签: python numpy euclidean-distance

我在numpy中有一系列分数:

points = rand(dim, n_points)

我想:

  1. 计算某个点与所有其他点之间的所有l2范数(欧几里德距离)
  2. 计算所有成对距离。
  3. 并且最好是所有numpy和no for。一个人怎么做呢?

2 个答案:

答案 0 :(得分:4)

如果您愿意使用SciPy,scipy.spatial.distance模块(函数cdist和/或pdist)可以完全按照您的要求执行,所有循环都在C中完成。你也可以通过广播来实现,但是会有一些额外的内存开销。

答案 1 :(得分:1)

这可能有助于第二部分:

import numpy as np
from numpy import *
p=rand(3,4) # this is column-wise so each vector has length 3
sqrt(sum((p[:,np.newaxis,:]-p[:,:,np.newaxis])**2 ,axis=0) )

给出了

array([[ 0.        ,  0.37355868,  0.64896708,  1.14974483],
   [ 0.37355868,  0.        ,  0.6277216 ,  1.19625254],
   [ 0.64896708,  0.6277216 ,  0.        ,  0.77465192],
   [ 1.14974483,  1.19625254,  0.77465192,  0.        ]])

如果p是

array([[ 0.46193242,  0.11934744,  0.3836483 ,  0.84897951],
   [ 0.19102709,  0.33050367,  0.36382587,  0.96880535],
   [ 0.84963349,  0.79740414,  0.22901247,  0.09652746]])

您可以通过

查看其中一个条目
sqrt(sum ((p[:,0]-p[:,2] )**2 ))
0.64896708223796884

诀窍是放置newaxis然后进行广播。

祝你好运!