2013-07-19 5 views
5

Ich benutze Python mit numpy, scipy und scikit-learn Modul.Berechnen Sie die Ähnlichkeit der Sparse Matrix

Ich möchte die Arrays in sehr großen dünnen Matrix zu klassifizieren. (100.000 * 100.000)

Die Werte in der Matrix gleich 0 oder 1. Das einzige, was ich habe, ist der Index-Wert = 1.

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

was bedeutet

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

Wie kann ich das Index-Array in spärlich in scipy ändern?

Wie kann ich diese Arrays schnell klassifizieren?

Vielen Dank.

+0

das macht mich, es möglich sein, würde sich fragen, nur die gesamte Matrix nicht-spärlich zu machen, da alle Werte 0 sind oder 1 sowieso, also statt 64bit pro float oder so, nur jeweils ein bit? (Ich weiß, dass dies Ihr Problem nicht löst, aber Ihre Frage brachte mich dazu, diese Frage zu stellen) – usethedeathstar

+0

Welche Art von Ähnlichkeit möchten Sie berechnen? Warum brauchen Sie die Sparse-Matrix, anstatt nur die Indizes zu verwenden? Wie wäre es mit etwas einfachem wie len (set (a) & set (b))/float (len (a))? –

+0

Eigentlich möchte ich diese Array von der Ähnlichkeit gruppieren. Zum Beispiel ist [1,1,1,0] eher wie [1,1,0,0], aber umgekehrt mit [0,0,0,1]. Da die Anzahl der Spalten und Zeilen groß ist. Ich weiß nicht, ob es irgendeine Methode gibt, die es früher machen könnte. –

Antwort

3

Wenn Sie die spärlichen coo_matrix wählen Sie es mit den Indizes vorbei wie erstellen:

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

Ist es möglich, eine nicht-quadratische Sparse-Matrix mit scipy zu erstellen? –

+0

Ich habe es nie versucht ... Jetzt bin ich am Handy ... Sie können es versuchen, ein weiteres Array von Indizes übergeben und Form mit einer ganzen Zahl im Tupel definieren ... –

+0

@Jimmy haben Sie versucht, was hier vorgeschlagen wurde ? Lass es mich wissen, wenn du etwas anderes brauchst ... –