2012-01-02 31 views
0

私はPythonでベクトルを動的に育てることを望んでいます。さらに、これらの疎ベクトル間の距離を計算したいと思います。scipy.spatial.distanceの距離関数を使用することをお勧めします(他の提案は歓迎します)。どのようにこれを行うにはどのようなアイデア? (初めは効率的である必要はありません)Python - 疎ベクトル/距離計算

ありがとうございます!

+1

:あなたはこのようなリストから行スパース行列を定義することができます。 pairwise.pairwise_distances.html)をscikit-learnで学んでください。 scipy.spatial.distanceを使用すると、たとえばcdist(X.todense()、Y.todense()、metric = ...) – denis

答えて

4

通常のPythonリスト(動的なもの)をベクトルとして使用できます。簡単な例を次に示します。それは持っている -

import numpy 
a = numpy.array([1,2,3]) 

あなたの質問のまばらな部分は、私はそのためにscipyのダウンロードを使用したい不可欠である場合:aganders3の提案を1として

from scipy.spatial.distance import sqeuclidean 
a = [1,2,3] 
b = [0,0,0] 
print sqeuclidean(a,b) # 14 

、必要に応じて、あなたもnumpyの配列を使用することに注意してくださいスパース行列のサポート1xnの行列を定義してベクトルとして使用できます。これは、(パラメータはデフォルトではゼロで満たされ、行列のサイズである)作品:

sqeuclidean(scipy.sparse.coo_matrix((1,3)),scipy.sparse.coo_matrix((1,3))) # 0 

スパースマトリックスのmany kinds、ベースの一部の辞書は(コメントを参照)があります。 [pairwise_distances(http://scikit-learn.sourceforge.net/dev/modules/generated/sklearn.metricsを参照して、疎な距離について

scipy.sparse.csr_matrix([1,2,3]) 
+0

良い答えです。私はあなたがnumpy配列を使うことができることにも注意したい。これは他の場合に有益かもしれない。 – aganders3

+0

彼は、ほとんどの要素が欠けているベクトルを意味すると思います。それらは辞書として表現することができます:{1:5、2:4、101:15}。今あなたはどのように距離を計算していますか? – ugoren

+0

@ ugoren:私は自分の答えを編集しました。 –