2017-06-05 16 views
0

私は、配列の距離行列を計算するためにscipyでpython 2.7を使用しています。python scipy圧縮距離行列の適切な距離値を取得する方法

返された凝縮行列で希望の距離値を見つける方法がわかりません。

from scipy.spatial.distance import pdist 
import numpy as np 

a = np.array([[1],[4],[0],[5]]) 
print a 
print pdist(a) 

[ 3. 1. 4. 4. 1. 5.] 

を印刷します例を参照してください私は、彼らがIJを意味する場合凝縮マトリックス中のijエントリはithreadのが不思議iとjのエントリの間の距離を保存する必要があることhereを見つけましたi * jまたはstr.join(i、j)(例:1,2 - > 2または12)。

希望するインデックスを知る一貫した方法が見つかりません。

私の例を見ると、最初のオプションが有効な場合は、エントリ0から他の場所までのすべての距離がエントリ0に格納されることを期待してください。

誰かが、エントリxからエントリyまでの私の望む距離をどのように抽出することができますか?どのインデックスを探していますか?

ありがとうございます!

答えて

2

このベクターは凝縮した形です。それは自然な順序(あなたの例で0,10,20,30,41,21,31,42,32,4)のインデックスのすべてのペアを列挙し、これらの配列エントリにおける要素間の距離をもたらします。

また、凝縮された形を正方行列の形に変換する(逆もまた同様)squareform関数もあります。正方行列形式はまさにあなたが期待するもの、すなわち、エントリij(行i、列j)であり、i番目とj番目のエントリの間の距離を格納します。たとえば、コードの末尾にprint squareform(d)を追加すると、出力は次のようになります。

array([[ 0., 3., 1., 4.], 
     [ 3., 0., 4., 1.], 
     [ 1., 4., 0., 5.], 
     [ 4., 1., 5., 0.]]) 
関連する問題