偶尔我会操纵一个csr_matrix
,但是我总是忘记了indices
和indptr
参数如何共同构建一个稀疏矩阵。
我正在寻找一个清晰直观的解释,说明在使用符号indptr
定义稀疏矩阵时data
如何与indices
和csr_matrix((data, indices, indptr), [shape=(M, N)])
参数交互。
从scipy documentation中可以看到data
参数包含所有非零数据,并且indices
参数包含与该数据关联的列(因此,在文档中给出的示例中indices
等于col
)。但是,我们如何清楚地解释indptr
参数呢?
最佳答案
也许这种解释可以帮助理解这个概念:
data
是一个数组,其中包含稀疏矩阵的所有非零元素。 indices
是一个将data
中的每个元素映射到稀疏矩阵中其列的数组。 indptr
将data
和indices
的元素映射到稀疏矩阵的行。这是通过以下推理完成的:indptr
是一个包含 M + 1 元素[indptr[i]:indptr[i+1]]
返回要从和对应的data
和indices
中获取的元素的索引。因此,假设indptr[i]=k
和indptr[i+1]=l
,对应于行或行的数据将在data[k:l]
列处为indices[k:l]
。这是棘手的部分,希望以下示例有助于理解它。 编辑:在下面的示例中,为了避免混淆,我用字母替换了
data
中的数字。注意:
indptr
中的值必然会增加,因为indptr
中的下一个单元格(下一行)是指data
和indices
中与该行相对应的下一个值。