簡體   English   中英

從numpy python中的稀疏矩陣生成密集矩陣

[英]Generating a dense matrix from a sparse matrix in numpy python

我有一個Sqlite數據庫,其中包含以下類型的架構:

termcount(doc_num, term , count)

此表包含文檔中各自計數的術語。 喜歡

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

該矩陣可以被認為是稀疏矩陣,因為每個文檔包含非常少的將具有非零值的項。

如何使用numpy從這個稀疏矩陣創建一個密集矩陣,因為我必須使用余弦相似度計算文檔之間的相似性。

這個密集矩陣看起來像一個表格,其中docid作為第一列,所有條款都將列為第一行。剩余的單元格將包含計數。

 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]])

這是一個如何將稀疏矩陣轉換為從scipy取得的密集矩陣的示例

我用Pandas解決了這個問題。 因為我們想保留文檔ID和term id。

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

輸出:

    t2  t3  t1
d2  0  10   0
d3  5   0   0
d1  0   0  12

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM