3
我已描述了一個多段線(連接的直線段的排序列表)如下的數組:計算陣列的連續點之間的歐氏距離與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提供EVERY距離,我想只有相鄰行之間的距離。另外,我寧願避免創建自定義函數(因爲我已經有一個工作解決方案),而是使用更多的「numpythonic」使用本機函數。
經過我自己的一些死路,當你這樣說時,它實際上是非常簡單的。我曾經看到過'hypot'這個詞,但是谷歌搜索「numpy hypot」並沒有返回任何內容,我不得不在numpy docs頁面上進行搜索。謝謝! – heltonbiker
在3D中這也是可能的嗎? – Varlor
@Varlor:不是用'hypot',而是第二個版本,'segdists = np.sqrt((d ** 2).sum(axis = 1))'在3D中工作。 –