0

我正在寻找一种快速计算数组中所有值的欧几里得距离的方法。结果应该在一个新的数组中,使用两个用于计算的“伙伴”按升序排列。

例如:

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 
4

2 回答 2

2

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

于 2013-09-07T13:01:59.180 回答
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值,这可能不是最有效的方法,但它确实有效。

于 2013-09-07T12:53:44.357 回答