【问题标题】:Generating a dense matrix from a sparse matrix in numpy python从numpy python中的稀疏矩阵生成密集矩阵
【发布时间】:2013-05-06 12:28:45
【问题描述】:

我有一个包含以下类型架构的 Sqlite 数据库:

termcount(doc_num, term , count)

此表包含术语及其在文档中的相应计数。 喜欢

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

这个矩阵可以被认为是稀疏矩阵,因为每个文档都包含非常少的具有非零值的词。

我如何使用 numpy 从这个稀疏矩阵创建一个密集矩阵,因为我必须使用余弦相似度计算文档之间的相似度。

这个密集矩阵看起来像一个表格,第一列是 docid,所有术语都将列在第一行。其余的单元格将包含计数。

【问题讨论】:

    标签: python arrays numpy scipy sparse-matrix


    【解决方案1】:
     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

    【讨论】:

      【解决方案2】:

      我使用 Pandas 解决了这个问题。因为我们要保留文档 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-02-23
        • 2016-06-25
        • 2014-03-06
        • 1970-01-01
        • 2017-07-20
        • 1970-01-01
        • 2012-02-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多