在numpy数组中计算欧几里得距离

5

我有一个三维数组,如下所示:

 A = [[x1 y1 z1]
      [x2 y2 z2]
      [x3 y3 z3]]

我需要找出每个点之间的欧几里得距离,这样我才能得到仅包含 (row0,row1)(row1,row2)(row0,row2) 三种距离的输出结果。

我有一些代码:

dist = scipy.spatial.distance.cdist(A,A, 'euclidean')

但它会以矩阵形式给出距离。
dist= [[0  a   b]
       [a  0   c]
       [b  c   0]]

我希望您能将结果翻译成 [a b c]
2个回答

6
考虑使用 scipy.spatial.distance.pdist
你可以这样做。
>>> A = np.array([[1, 2, 3], [4, 5, 6], [10, 20, 30]])
>>> scipy.spatial.distance.pdist(A)
array([  5.19615242,  33.67491648,  28.93095228])

但要注意输出距离的顺序是(row0,row1),(row0,row2)和(row1,row2)。


没问题,一点都不。:) - Kei Minagawa

3
您可以像这样做:

您可以采取以下措施:

>>> import numpy as np
>>> from itertools import combinations
>>> A = np.array([[1, 2, 3], [4, 5, 6], [10, 20, 30]])
>>> [np.linalg.norm(a-b) for a, b in combinations(A, 2)]
[5.196152422706632, 33.674916480965472, 28.930952282978865]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接