【问题标题】:Access element from csr_matrix从 csr_matrix 访问元素
【发布时间】:2021-06-16 18:24:09
【问题描述】:

我使用Scipy dok_matrix 方法创建了一个稀疏矩阵,如下所示:

sparse_dtm = dok_matrix((num_documents, vocabulary_size), dtype=np.float32)
for doc_index, document in enumerate(data_list):
    document_counter = Counter(document)
    for word in set(document):
        sparse_dtm[doc_index, word_index[word]] = document_counter[word]

其中data_list 是带有标记化文本的列表列表。

创建sparse_dtm 后,我想检索第一行的所有值。

documentation 我知道我可以使用.getrow() 方法从行i 中获取所有元素。

但是,到目前为止,我无法检索存储在 csr_matrix 中的键/值:

sparse_dtm.getrow(0).keys()
AttributeError: keys not found

sparse_dtm.getrow(0)[0]
<1x90140 sparse matrix of type '<class 'numpy.float32'>'
    with 576 stored elements in Compressed Sparse Row format>

sparse_dtm 确实包含正确的信息:

print(sparse_dtm.getrow(0))
Output: (0, 21018)    6.0
        (0, 76741)    3.0
        (0, 14008)    1.0
        (0, 54143)    2.0
        (0, 11866)    1.0
        ...
  

如何从行 i 访问元素并检索其键和值?

【问题讨论】:

  • sparse dok 格式是dict 的子类,但csr 不是。它的数据存储在 3 个数组中,分别称为 dataindicesindptrgetrow 返回一个新的csr 矩阵,形状为 (1,n). The print` 显示索引和值,但不指示矩阵的存储方式。

标签: python-3.x dictionary scipy sparse-matrix


【解决方案1】:

获取值:

sparse_p_ij = dok_matrix((num_documents, vocabulary_size), dtype=np.float32)
row_zero = self.sparse_dtm.getrow(0).toarray()[0]

这提供了所有值。要获取每个值的键,请取非零值的索引:

indices = row_zero.nonzero()[0]

然后将这些值提供给index_to_word,我创建如下:

word_to_index = dict()
index_to_word = dict()

for i, word in enumerate(vocabulary):
    word_to_index[word] = i
    index_to_word[i] = word

其中vocabulary 是语料库中所有单词的集合。

【讨论】:

    猜你喜欢
    • 2014-03-10
    • 1970-01-01
    • 1970-01-01
    • 2016-11-01
    • 2013-04-24
    • 2014-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多