web-dev-qa-db-fra.com

Générer une matrice dense à partir d’une matrice clairsemée numpy python

J'ai une base de données SQLite qui contient le type de schéma suivant:

termcount(doc_num, term , count)

Ce tableau contient les termes avec leurs comptes respectifs dans le document. comme

(doc1 , term1 ,12)
(doc1, term 22, 2)
.
.
(docn,term1 , 10)

Cette matrice peut être considérée comme une matrice éparse car chaque document contient très peu de termes qui auront une valeur différente de zéro.

Comment pourrais-je créer une matrice dense à partir de cette matrice clairsemée en utilisant numpy, car je dois calculer la similarité entre les documents en utilisant la similarité en cosinus.

Cette matrice dense ressemblera à une table dont docid est la première colonne et tous les termes seront répertoriés comme première ligne. Les cellules restantes contiendront des nombres.

41
user2374515

J'ai résolu ce problème en utilisant des pandas. Parce que nous voulons conserver les identifiants de document et de terme.

from pandas import DataFrame 

# A sparse matrix in dictionary form (can be a SQLite database). Tuples contains doc_id        and term_id. 
doc_term_dict={('d1','t1'):12, ('d2','t3'):10, ('d3','t2'):5}

#extract all unique documents and terms ids and intialize a empty dataframe.
rows = set([d for (d,t) in doc_term_dict.keys()])  
cols = set([t for (d,t) in doc_term_dict.keys()])
df = DataFrame(index = rows, columns = cols )
df = df.fillna(0)

#assign all nonzero values in dataframe
for key, value in doc_term_dict.items():
    df[key[1]][key[0]] = value   

print df

Sortie:

    t2  t3  t1
d2  0  10   0
d3  5   0   0
d1  0   0  12
8
user2374515
 from scipy.sparse import csr_matrix
 A = csr_matrix([[1,0,2],[0,3,0]])
 >>>A
 <2x3 sparse matrix of type '<type 'numpy.int64'>'
    with 3 stored elements in Compressed Sparse Row format>
 >>> A.todense()
   matrix([[1, 0, 2],
           [0, 3, 0]])
 >>> A.toarray()
      array([[1, 0, 2],
            [0, 3, 0]])

voici un exemple de conversion d’une matrice clairsemée en une matrice dense tirée de scipy

76
Rachel Gallen