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]
、または同じ配列の 3 番目の列のいずれかが得られます。
2 つの点 (2 つの座標ペア) 間の距離を返す関数を既に持っていることに注意することが重要ですが、行ペアをループする代わりに、単一の配列操作でそれを適用する方法がわかりません。
現在、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]]
私の主な質問は、「ループではなく配列操作のように、距離関数 (引数として行のペアを取る) を実行するにはどうすればよいですか?」です。(つまり、どうすれば適切にベクトル化できますか)
その他のトピックに関する質問は次のとおりです。
- パンダを使用することにした場合、これを達成するための巧妙なトリックはありますか?
scipy.spatial.distance
地理的距離 (haversine、大圏距離) を使用して「私のために働く」方法はありますか?
また、不必要に複雑なことをしている場合は、いくつかのヒントをいただければ幸いです。
皆様、ご関心をお寄せいただき、誠にありがとうございます。