为了账号安全,请及时绑定邮箱和手机立即绑定

在numpy python中从稀疏矩阵生成密集矩阵

在numpy python中从稀疏矩阵生成密集矩阵

鸿蒙传说 2021-03-18 14:15:44
我有一个Sqlite数据库,其中包含以下类型的架构:termcount(doc_num, term , count)该表包含术语及其在文档中的各自计数。喜欢(doc1 , term1 ,12)(doc1, term 22, 2)..(docn,term1 , 10)该矩阵可以视为稀疏矩阵,因为每个文档都包含很少的具有非零值的项。我将如何使用numpy从稀疏矩阵创建密集矩阵,因为我必须使用余弦相似度来计算文档之间的相似度。这个密集的矩阵看起来像一个表格,第一列为docid,所有术语将列为第一行,其余单元格将包含计数。
查看完整描述

2 回答

?
沧海一幻觉

TA贡献1824条经验 获得超5个赞

 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提取的密集矩阵的示例


查看完整回答
反对 回复 2021-03-23
?
小怪兽爱吃肉

TA贡献1852条经验 获得超1个赞

我用熊猫解决了这个问题。因为我们要保留文档ID和术语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


查看完整回答
反对 回复 2021-03-23
  • 2 回答
  • 0 关注
  • 366 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号