访问来自 csr_matrix 的元素

Access element from csr_matrix

我使用 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:

中的 keys/values
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_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 是语料库中所有单词的集合。