2013-07-19 12 views
5

Używam Pythona z modułem numpy, scipy i scikit-learn.Oblicz podobieństwo rzadkiej macierzy

Chciałbym sklasyfikować tablice w bardzo dużej macierzy rzadkiej. (100,000 * 100,000)

Wartości w macierzy są równe 0 lub 1. Jedyną rzeczą, jaką ma to indeks o wartości = 1.

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

co oznacza

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

Jak mogę zmienić tablicę indeksów na sparse array w scipy?

Jak szybko sklasyfikować tablicę?

Dziękuję bardzo.

+0

to sprawia, że ​​zastanawiam się, czy to możliwe, aby po prostu sprawiają, że cała matryca non-rzadki, ponieważ wszystkie wartości są 0 lub 1 tak czy inaczej, więc zamiast 64bit na float lub tak, używasz tylko jeden bit każdy? (wiem, że to nie rozwiązuje twojego problemu, ale twoje pytanie sprawiło, że zadałam to pytanie) – usethedeathstar

+0

Jakie podobieństwo chcesz obliczyć? Dlaczego potrzebujesz rzadkiej matrycy, zamiast tylko używać indeksów? Co powiesz na coś prostego jak len (set (a) & set (b))/float (len (a))? –

+0

Właściwie chciałbym zgrupować te tablice z podobieństwa. Na przykład [1,1,1,0] jest bardziej podobny do [1,1,0,0], ale odwrotnie do [0,0,0,1]. Ponieważ liczba kolumn i wierszy jest duża. Nie wiem, czy istnieje jakakolwiek metoda mogłaby zrobić to wcześniej. –

Odpowiedz

3

Jeśli wybierzesz rzadki coo_matrix można utworzyć to przechodząc indeksy jak:

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

Czy możliwe jest utworzenie macierzy nieskadronych z scipy? –

+0

Nigdy nie próbowałem ... Teraz jestem na telefonie komórkowym ... możesz wypróbować to przechodząc jeszcze jedną tablicę indeksów i definiując kształt z jeszcze jedną liczbą całkowitą w krotce ... –

+0

@ Jimmy czy próbowałeś tego, co proponowano tutaj ? Daj mi znać, jeśli potrzebujesz czegoś innego ... –

Powiązane problemy