首页 文章

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

提问于
浏览
0

我最近一直在处理稀疏矩阵 . 我的目标是以某种方式将图形的邻接列表转换为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) 函数完成的) .

1 回答

  • 1

    内部存储的内容与您通过 print(A) (其中 Acsr_matrix )打印矩阵时所看到的内容存在差异 .

    documentation中列出了属性 . 其中有以下三个属性:

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

    您可以通过 A.dataA.indicesA.indptr 访问(并操纵)它们 .

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

相关问题