2个向量中所有点之间的欧几里德距离

时间:2016-03-04 21:48:10

标签: python python-2.7 numpy

如果我有两个长度为M和N的单维数组,那么计算所有点之间欧氏距离的最有效方法是什么,结果是NxM数组?我试图用Numpy解决这个问题,但我很陌生,所以我有点卡住了。

目前我这样做:

def get_distances(x,y):
    #compute distances between all points
    distances = np.zeros((len(y),len(x)))
    for i in range(len(y)):
        for j in range(len(x)):
            distances[i,j] = (x[j] - y[i])**2
    return distances

1 个答案:

答案 0 :(得分:3)

假设您有一维位置:

2016-03-04 22:17:20 +0000
2016-03-04 16:17:20 -0600

你可以使用广播:

a = np.random.uniform(50,200,5)
b = np.random.uniform(50,200,3)

结果为:

result = np.abs(a[:, None] - b[None, :])

所以i,j索引是阵列1的点i和阵列2的点j之间的距离

如果您希望结果为NxM形状,则需要交换array([[ 44.37361012, 22.20152487, 89.04608885], [ 42.83825434, 20.66616909, 87.51073307], [ 0.19806059, 21.97402467, 44.87053932], [ 8.42276237, 13.74932288, 53.0952411 ], [ 8.12181467, 30.29389993, 36.55066406]]) a

b