我最近处理稀疏矩阵。我的目标是以某种方式将图表的邻接列表转换为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)
函数完成的。)
答案 0 :(得分:1)
内部存储的内容与您通过print(A)
打印矩阵时所看到的内容存在差异(A
为csr_matrix
)。
在documentation中列出了属性。其中有以下三个属性:
数据CSR格式矩阵的数据数据
索引CSR格式矩阵的索引数组
indptr CSR格式索引矩阵的指针数组
您可以通过A.data
,A.indices
和A.indptr
访问(并操纵)它们。
底线:scipy中的CSR格式是一种“真正的”CSR格式,您不需要编写自己的解析器(只要你不关心你的情况下不必要的data
数组) 。
另请注意:CSR format中的矩阵始终由三个数组表示,而不是两个。