【发布时间】:2012-10-12 21:50:07
【问题描述】:
我正在处理从描述 GPS 轨迹的地理坐标列表创建的数组。数据是这样的:
[[-51.203018 -29.996149]
[-51.203018 -29.99625 ]
[-51.20266 -29.996229]
...,
[-51.64315 -29.717896]
[-51.643112 -29.717737]
[-51.642937 -29.717709]]
我想计算行之间的地理距离(在起点处第一个元素始终为零的特殊条件)。这会给我一个与len(distances) == coord_array.shape[1] 的距离列表,或者可能是同一数组中的第三列。
重要的是要注意,我已经有一个函数可以返回两点之间的距离(两个坐标对),但我不知道如何将它应用于单个数组操作,而不是循环遍历行对。
目前我正在执行以下操作来计算一个新列中的段距离,以及另一个新列中的累积距离(latlonarray 已在上面显示,distance(p1, p2) 已定义):
dists = [0.0]
for n in xrange(len(lonlat)-1):
dists.append(distance(lonlat[n+1], lonlat[n]))
lonlatarray = numpy.array(lonlat).reshape((-1,2))
distsarray = numpy.array(dists).reshape((-1,1))
cumdistsarray = numpy.cumsum(distsarray).reshape((-1,1))
print numpy.hstack((lonlatarray, distsarray, cumdistsarray))
[[ -51.203018 -29.996149 0. 0. ]
[ -51.203018 -29.99625 7.04461338 7.04461338]
[ -51.20266 -29.996229 39.87928578 46.92389917]
...,
[ -51.64315 -29.717896 11.11669769 92529.72742791]
[ -51.643112 -29.717737 11.77016407 92541.49759198]
[ -51.642937 -29.717709 19.57670066 92561.07429263]]
我的主要问题是:“我怎样才能像数组操作而不是循环一样执行距离函数(以一对行作为参数)?” (也就是说,我怎样才能正确地对其进行矢量化)
其他主题问题是:
- 如果我决定使用 Pandas,是否有一些巧妙的技巧可以做到这一点?
- 有没有办法让
scipy.spatial.distance使用地理距离(haversine、great-circle distance)来“为我工作”?
另外,如果我正在做任何不必要的复杂操作,我将不胜感激。
非常感谢大家的关注。
【问题讨论】:
标签: python numpy multidimensional-array pandas vectorization