2013-07-19 16 views
5

numpy、scipy、scikit-learnモジュールでPythonを使用しています。スパース行列の類似度を計算する

非常に大きな疎な行列で配列を分類したいと思います。 (*10万10万)

行列の値は私が持っている唯一のものは

a = [0,1,0,1,0,1,0,1,0,1,0] 
b = [0,0,1,0,1,0,1,0,1,0,1] 

を意味する値= 1

a = [1,3,5,7,9] 
b = [2,4,6,8,10] 

のインデックスである0または1に等しいですscipyでインデックス配列をスパース配列に変更するにはどうすればよいですか?

これらの配列を簡単にどのように分類できますか?

ありがとうございました。

+0

とにかく1であるので、フロートあたり64ビットではなく、それぞれ1ビットしか使用しません。 (私はこれがあなたの問題を解決することはないと知っていますが、あなたの質問は私にこの問題を提起させました) – usethedeathstar

+0

どのような類似性を計算したいですか?インデックスを使うのではなく、なぜ疎な行列が必要なのですか? len(set(a)&set(b))/ float(len(a))のような単純なものはどうですか? –

+0

実際には、これらの配列を類似性からグループ化したいと思います。たとえば、[1,1,1,0]は[1,1,0,0]に似ていますが、[0,0,0,1]とは逆です。列と行の数が多いためです。私はそれをもっと早くできる方法があるのか​​分かりません。 –

答えて

3

あなたがまばらなcoo_matrixを選択した場合は、それは次のようにインデックスを渡して作成することができます。これはすべての値が0であるため、私は、それだけで全体行列非スパースを作ることが可能になり、思ってしまう

from scipy.sparse import coo_matrix 
import scipy 
nrows = 100000 
ncols = 100000 
row = scipy.array([1,3,5,7,9]) 
col = scipy.array([2,4,6,8,10]) 
values = scipy.ones(col.size) 
m = coo_matrix((values, (row,col)), shape=(nrows, ncols), dtype=float) 
+0

scipyで非正方形の疎行列を作ることは可能ですか? –

+0

私は決して試したことはありません...今私は携帯電話にいます...もう1つのインデックスの配列を渡して、タプル内にもう1つの整数を持つ形状を定義することができます。 –

+0

@Jimmyはここで提案されたものを試しましたか?他にsthが必要な場合はお知らせください... –

関連する問題