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中工作。 –