簡體   English   中英

用numpy計算數組連續點之間的歐氏距離

[英]Calculating euclidean distance between consecutive points of an array with numpy

我有一個數組描述了折線(連接的直線段的有序列表),如下所示:

points = ((0,0),
          (1,2),
          (3,4),
          (6,5),
          (10,3),
          (15,4))
points = numpy.array(points, dtype=float)

目前,我使用以下循環獲得段距離列表:

segdists = []
for seg in xrange(points.shape[0]-1):
    seg = numpy.diff(points[seg:seg+2], axis=0)
    segdists.append(numpy.linalg.norm(seg))

相反,我希望使用一些原生的Scipy / Numpy函數來應用單個函數調用,而不使用循環。

我能得到的最接近的是:

from scipy.spatial.distance import pdist
segdists = pdist(points, metric='euclidean')

但在后一種情況下,segdists提供了每個距離,我想只得到相鄰行之間的距離。

另外,我寧願避免創建自定義函數(因為我已經有了一個可行的解決方案),而是使用更多的“numpythonic”使用本機函數。

這是一種方式:

使用向量化的np.diff來計算增量:

d = np.diff(points, axis=0)

然后使用np.hypot計算長度:

segdists = np.hypot(d[:,0], d[:,1])

或者使用更明確的計算:

segdists = np.sqrt((d ** 2).sum(axis=1))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM