二次元座標系で表現された点列の各セグメント間の距離を効率的に計算する方法を紹介します。
通常 配列要素間の演算を行う場合は、for文やwhile文を使用して愚直に計算する必要がありますが、Pythonのnumpyパッケージを使用することで、セグメント間距離計算は1行で記述することが可能です。
入出力
(入力)
※numpy.adarray型としていますが、通常のリスト型でも同様の結果が得られます。
(出力)
必要パッケージ
- numpy
解法
各セグメントについて、以下①~④を計算することで、セグメント間距離を計算する
- 座標ごとの差分値
- ①の二乗
- 全座標系の②の和
- ③の平方根
コード
Point1: numpyパッケージのdiff関数を使用することで、上記①のセグメント間の差分値を一行で求めることができる
Point2: numpy.adarray型どうしを演算することで、配列要素どうしの演算結果を取得できるため、上記②~④の計算もそれぞれ一行で記述できる
Point2: numpy.adarray型どうしを演算することで、配列要素どうしの演算結果を取得できるため、上記②~④の計算もそれぞれ一行で記述できる
※関数をネストすることで、上記①~④を通して一行で記述することも可能です。
特記事項
①セグメント間距離結果が格納されたnumpy.adarray型変数のサイズは、入力時より1だけ小さくなります。
出力結果を前方差分を基に扱う場合は配列の先頭に、後方差分を基に扱う場合は配列の末尾に値0.0を追加してください。
②入力点列が曲線の場合は、セグメント間距離=曲線距離は成立しません。
入力点列をアップサンプリングすることで、セグメント間距離は曲線距離に漸近します。