np数组之间的欧几里德距离

时间:2015-11-13 17:19:34

标签: python knn euclidean-distance

我有两个numpy数组a和b:

a和b是相同的尺寸,a可以是与b不同的尺寸。

例如:

a = [[1,2], ..., [5,7]]
b = [ [3,8], [4,7], ... [9,15] ] 

有没有一种简单的方法来计算a和b之间的欧几里德距离,这样这个新数组就可以用在k个最近邻居学习算法中。

注意:这是在python中

4 个答案:

答案 0 :(得分:2)

答案 1 :(得分:1)

如果你想要的是k个最近邻,那么有比计算全距离矩阵更有效的方法(特别是有很多点)。如果你想要快速的k邻居搜索,请查看scipy的KDTree

答案 2 :(得分:0)

您可以像这样使用scipy.spatial.distance.cdist:

from scipy.spatial import distance

a = [[1,2], ..., [5,7]]
b = [ [3,8], [4,7], ... [9,15] ] 
dist = distance.cdist(a, b, 'euclidean')

仅当a和b具有少量元素时,才能使用此方法。 如果有数百万个元素而不是它的慢速并且需要大量的内存空间。 即我们可以说' a'拥有100万个元素和' b'有1000个元素。最终会得到O(m * n),其中m = 1000000且b = 1000。

在这里你可以看到几个方法在效率方面进行了比较: Efficient and precise calculation of the euclidean distance

答案 3 :(得分:0)

您可以使用numpy。这里是一个例子:

import numpy as np


a = np.array([3, 0])
b = np.array([0, 4])

c = np.sqrt(np.sum(((a - b) ** 2)))
# c == 5.0