2017-06-30 43 views
0

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

我看到的一个可能的选择是,我首先构建一个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,然而,这是我的理解首席运营官格式,而不是企业社会责任。 (这是使用csr_matrix(adjacency_matrix)函数完成的)。

回答

1

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

documentation中列出了属性。除其他有以下三个特性:矩阵的矩阵
指数CSR格式索引阵列的

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

您可以通过A.dataA.indicesA.indptr访问(并操纵)它们。底线:scipy中的CSR格式是一种“真正的”CSR格式,你不需要编写自己的解析器(只要你不关心你的情况,不必要的data数组)。
另请注意:CSR format中的矩阵总是由三个数组表示,而不是两个。

+0

谢谢!这是我没有的缺失信息。我意识到有三个数组表示,但指针部分将分开写。 –