2013-07-19 12 views
5

Benzerlik numpy, scipy ve scikit-öğrenme modülü ile Python kullanıyorum.Hesaplayın Seyrek Matris

Dizileri çok büyük seyrek matrislerde sınıflandırmak istiyorum. (100,000 * 100,000)

matristeki değerler

, 0 ya da 1'e eşit bir tek şey değer endeksidir =

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

anlamına 1.

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

Dizin dizisini scipy'deki seyrek diziye nasıl değiştirebilirim?

Bu dizileri nasıl hızlı bir şekilde sınıflandırabilirim?

Çok teşekkür ederim.

+0

Ya da 1 her neyse, bu yüzden float başına 64bit yerine, her biri sadece bir bit kullanıyorsunuz? (Bu sorunun senin problemini çözmediğini biliyorum, ama senin sorunun bu soruya gelmemi sağladı) – usethedeathstar

+0

Ne tür bir benzerlik hesaplamak istiyorsun? Neden endeksleri kullanmak yerine seyrek matrise ihtiyacınız var? Len (set (a) & set (b))/float (len (a)) gibi basit bir şeye ne dersiniz? –

+0

Aslında, bu diziyi benzerlikten gruplamak istiyorum. Örneğin, [1,1,1,0] daha çok [1,1,0,0] gibidir, fakat [0,0,0,1] ile tersidir. Sütun ve satırların sayısı büyük olduğundan. Bilemiyorum, herhangi bir yöntem daha erken yapabilirdi. –

cevap

3

Eğer seyrek coo_matrix seçerseniz o gibi indeksleri geçen oluşturabilirsiniz:

bu beni tüm değerleri 0 çünkü, sadece bütün matris olmayan seyrek yapmak mümkün olacaktır meraklandırıyor
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 ile kare olmayan seyrek bir matris yapmak mümkün mü? –

+0

Hiç denemedim ... Şimdi cep telefonumdayım ... bir dizi indis dizisini geçerek ve tuplede bir tamsayı ile şekilleri tanımlamayı deneyebilirsiniz ... –

+0

@Jimmy Burada önerilenleri denediniz mi? ? Başka bir şeye ihtiyacın olursa bana haber ver ... –