1. ホーム
  2. python

[解決済み] python で scipy.spatial.distance.cdist(X, Y) を使用して点群間の距離を求める。

2022-02-11 05:15:49

質問

Aというデータの配列があるのですが、以下のような感じです。

array([[0.59, 1.23], [0.89, 1.67], [0.21,0.99]...])

で、[x,y]の点のセットが約400個入っています。A の各点の集合と、A と全く同じで長さが半分の配列 B の各点の集合との間の距離を求めたいのです(つまり、約 200 組の [x,y] 点)。つまり、A のすべての [x,y] 値に対する B の q 番目の [x,y] 値の組の間の距離を求めたい場合、次のような方法を試してみました。

import scipy.spatial.distance
for q in range(0,len(B)):
    y=scipy.spatial.distance.cdist(A,B[:q,:])

が、これではうまくいかないと思います。私はただ、Aのすべての点に対するBのq番目の行の間の距離を示す出力が欲しいだけなのです。

どのように解決するのですか?

2つの解決策があります。

行列全体を直接計算し、A と B[q] の間の値について q 番目の列にアクセスします。

d = scipy.spatial.distance.cdist(A,B)

for q in range(len(B)):
    y = d[:,q]
    print y

出来上がった行列が大きすぎて、メモリに保持できない場合。こうすればいい。

for q in range(len(B)):
    y = scipy.spatial.distance.cdist(A,[B[q]])
    print y