Calculate Euclidean Distance within points in numpy array

北慕城南 提交于 2020-01-11 06:07:14

问题


I have 3D array as

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

I have to find euclidean distance between each points so that I'll get output with only 3 distance between (row0,row1),(row1,row2) and (row0,row2).

I have some code

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

but it will give distance in matrix form as

dist= [[0  a   b]
       [a  0   c]
       [b  c   0]]

I want results as [a b c].


回答1:


You can do something like this:

>>> 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]



回答2:


Consider using scipy.spatial.distance.pdist.

You can do like this.

>>> A = np.array([[1, 2, 3], [4, 5, 6], [10, 20, 30]])
>>> scipy.spatial.distance.pdist(A)
array([  5.19615242,  33.67491648,  28.93095228])

But be careful the order of the output distance is (row0,row1),(row0,row2) and (row1,row2).



来源:https://stackoverflow.com/questions/23267805/calculate-euclidean-distance-within-points-in-numpy-array

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!