偶尔我会操纵一个csr_matrix,但是我总是忘记了indicesindptr参数如何共同构建一个稀疏矩阵。

我正在寻找一个清晰直观的解释,说明在使用符号indptr定义稀疏矩阵时data如何与indicescsr_matrix((data, indices, indptr), [shape=(M, N)])参数交互。

scipy documentation中可以看到data参数包含所有非零数据,并且indices参数包含与该数据关联的列(因此,在文档中给出的示例中indices等于col)。但是,我们如何清楚地解释indptr参数呢?

最佳答案

也许这种解释可以帮助理解这个概念:

  • data是一个数组,其中包含稀疏矩阵的所有非零元素。
  • indices是一个将data中的每个元素映射到稀疏矩阵中其列的数组。
  • 然后,
  • indptrdataindices的元素映射到稀疏矩阵的行。这是通过以下推理完成的:
  • 如果稀疏矩阵具有 M个行,则indptr是一个包含 M + 1 元素
  • 的数组
  • 代表行的
  • [indptr[i]:indptr[i+1]]返回要从对应的dataindices中获取的元素的索引。因此,假设indptr[i]=kindptr[i+1]=l,对应于行或行的数据将在data[k:l]列处为indices[k:l]。这是棘手的部分,希望以下示例有助于理解它。

  • 编辑:在下面的示例中,为了避免混淆,我用字母替换了data中的数字。

    python - scipy csr_matrix : understand indptr-LMLPHP

    注意:indptr中的值必然会增加,因为indptr中的下一个单元格(下一行)是指dataindices中与该行相对应的下一个值。

    10-06 01:46