问题描述
在访问稀疏 CSR 矩阵中的最后一列时遇到一些问题。理想情况下,我想将最后一列转换为某种可以用作我的标签集的数组。我的 CSR 矩阵如下所示:
(0,1976) 1
(0,2916) 1
(0,3871) 1
(0,4437) 1
(0,8202) 1
(0,9458) 1
(0,10597) 1
(1,4801) 1
(1,6903) 1
(1,7525) 1
(2,873) 1
(2,1017) 1
(2,1740) 1
(2,1925) 1
(3,1976) 1
(3,5606) 1
(3,6898) 1
我想访问包含所有“1”的最后一列。有什么办法可以做到这一点吗?
解决方法
CSR 矩阵具有 indicies
和 indptr
属性,请参见下面的示例,该示例使用这些属性将矩阵转换为列表:
def sparse_to_string_list(matrix: csr_matrix):
res = []
indptr = matrix.indptr
indices = matrix.indices
for row in range(matrix.shape[0]):
arr = [k for k in indices[indptr[row]: indptr[row + 1]]]
arr.sort()
res.append(' '.join([str(k) for k in arr]))
return res