【问题标题】:Euclidean distance between np arraysnp 数组之间的欧几里得距离
【发布时间】:2016-02-15 08:48:00
【问题描述】:

我有两个 numpy 数组 a 和 b:

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

例如:

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

是否有一种简单的方法可以计算 a 和 b 之间的欧几里得距离,以便可以在 k 最近邻学习算法中使用这个新数组。

注意:这是在python中

【问题讨论】:

  • 所以你想要从a 中的每个点到b 中的每个点的欧几里得距离?你能举一个小例子输入输出吗?

标签: python knn euclidean-distance


【解决方案1】:

你可以使用 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

【讨论】:

    【解决方案2】:

    您可以像这样使用 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 的元素数量较少时,才可以使用此方法。 如果有数百万个元素比它慢并且需要大量内存空间。 IE。假设“a”有 100 万个元素,“b”有 1000 个元素。您将得到 O(m*n),其中 m=1000000 和 b=1000。

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

        【讨论】:

          猜你喜欢
          • 2011-01-29
          • 1970-01-01
          • 2013-02-12
          • 2023-03-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-03-02
          相关资源
          最近更新 更多