Scipy CSR 稀疏矩阵实际上是 COO?



我最近一直在处理稀疏矩阵。我的目标是以某种方式将图形的邻接列表转换为CSR格式,定义如下:http://devblogs.nvidia.com/parallelforall/wp-content/uploads/2014/07/CSR.png。

我看到的一个可能的选择是,我只需首先构造一个 NumPy 矩阵并使用 scipy.sparse.csr_matrix 进行转换。问题是,SciPy 中的 CSR 与链接中讨论的 CSR 有些不同。我的问题是,这只是一个差异,我需要编写自己的解析器,或者 SciPy 实际上可以转换为链接中定义的 CSR。

关于这个问题的更多信息,假设我有一个矩阵:

matrix([[1, 1, 0],
        [0, 0, 1],
        [1, 0, 1]])

CSR 格式由两个数组组成,列 (C( 和行 (R(。我努力看起来像:

C: [0,1,2,0,2]
R: [0,2,3,5]

SciPy 返回:

  (0, 0)    1
  (0, 1)    1
  (1, 2)    1
  (2, 0)    1
  (2, 2)    1

其中第二列与我的 C 相同,但据我了解,这是 COO 格式,而不是 CSR。(这是使用csr_matrix(adjacency_matrix)函数完成的(。

内部存储的内容与通过print(A)打印矩阵时看到的内容有所不同(其中Acsr_matrix(。

在文档中列出了属性。其中有以下三个属性:

数据 CSR 格式 矩阵索引

的数据数组 CSR 格式 矩阵

索引数组 indptr CSR 格式 矩阵的索引指针数组

您可以通过A.dataA.indicesA.indptr访问(和操作(它们。

底线:scipy中的CSR格式是一种"真正的"CSR格式,你不需要编写自己的解析器(只要你不关心你的情况下不必要的data数组(。
另请注意:CSR 格式的矩阵始终由三个数组表示,而不是两个。

最新更新