我有两个numpy数组a和b:
a和b是相同的尺寸,a可以是与b不同的尺寸。
例如:
a = [[1,2], ..., [5,7]]
b = [ [3,8], [4,7], ... [9,15] ]
有没有一种简单的方法来计算a和b之间的欧几里德距离,这样这个新数组就可以用在k个最近邻居学习算法中。
注意:这是在python中
答案 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