数组中值之间的欧几里德距离 - 结果在新数组中排序为asc

时间:2013-09-07 11:14:23

标签: python arrays numpy euclidean-distance

我正在寻找一种快速计算数组中所有值的欧氏距离的方法。结果应该是一个以升序排序的新数组,并使用两个“伙伴”进行计算。

例如:

a = [[2,4,5],[3,2,1],[5,7,2]]

res =欧几里德距离(a)以

命令递增

格式:[result, value A, value B](结果是数值a中值A和值B之间的eu.dist。)

例如:(未计算)

res = [[4, 0, 1],[6, 0, 2], [9, 1, 2]]

瘦我将以这种方式计算eu.dist

def euclidean(a, b):
    dist = numpy.linalg.norm(a-b)
    return dist 

2 个答案:

答案 0 :(得分:2)

尝试使用scipy.spatial.distance.cdist问题答案中给出的a。两个输入都是您的{{1}}数组。唯一的问题是你不会得到你正在寻找的确切格式 - 你会得到一个带有(i,j)元素的矩阵,而不是给你所需的距离。希望这会有所帮助。

答案 1 :(得分:1)

itertools.combinations函数应该可以为您提供各种元素对,然后您只需找到距离并对它们进行排序:

distances = [[euclidean(points[a], points[b]), a, b]
             for a, b in itertools.combinations(range(len(points)), 2)]
distances.sort() # distance is already first element, so no key function required

现在,对于numpy值,这可能不是最有效的方法,但它确实有效。