2016-04-18 39 views
0

私は2つのベクトルを持っています。x=[2,4,6,7]y=[2,6,7,8]とし、それぞれの対応するペアの間にユークリッド距離、または他の実装距離(例えばscipyから)を求めたいとします。それは dist=[0, 2, 1, 1]になります。2つのベクトル間の各ペアの距離を求める

私はdistのを計算することが出来るのですか

ValueError: XA must be a 2-dimensional array. 

を取得し、私は

dist = scipy.spatial.distance.cdist(x,y, metric='sqeuclidean') 

または

dist = [scipy.spatial.distance.cdist(x,y, metric='sqeuclidean') for x,y in zip(x,y)] 

を試してみて、なぜ私はその目的のためにデータを再構築しなければなりませんか?

+2

リスト内包表記( 'for x、y')内で使用する変数名に注意してください。理解が実行された後、それらは見えるままです。あなたの例では、それらの変数は '' x''と '' y'ベクトルと同じです。したがって、理解が終わった後、 'x'と' y'は各ベクトルの最後の値と等しくなります、ベクトルそのものではありません。 – elpres

答えて

0

cdistは、対応するペア間の距離のリストを計算するのではなく、すべてのペア間の距離のマトリックスを計算します。

np.linalg.norm((np.asarray(x)-np.asarray(y))[:, None], axis=1) 

idは、通常、n次元の点間のユークリッド距離にどのように書きますか?しかし、あなたが1次元の点だけを扱っているなら、elpresによって示唆されるような絶対的な差はより簡単になります。

+0

ユーザが提供しているように 'x'と' y'はここにリストされていますか?それがうまくいくかどうかはわかりません。 – AKS

+0

あなたは正しいです。 asarrayが必要です –

+0

私はscipyから実装された距離メトリックを適用する方法を探しています。実際にはスカラーからの1次元ベクトルの各値の距離が必要です。 – LetsPlayYahtzee

関連する問題