我正在寻找一种快速计算数组中所有值的欧氏距离的方法。结果应该是一个以升序排序的新数组,并使用两个“伙伴”进行计算。
例如:
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
答案 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
值,这可能不是最有效的方法,但它确实有效。