从scipy CSR稀疏矩阵中获取值、列索引和行指针数据

15

我有一个很大的矩阵,我想将其转换为稀疏CSR格式。

当我执行以下操作时:

import scipy as sp
Ks = sp.sparse.csr_matrix(A)

print Ks

当A很密集时,我会得到

 (0, 0) -2116689024.0
 (0, 1) 394620032.0
 (0, 2) -588142656.0
 (0, 12)    1567432448.0
 (0, 14)    -36273164.0
 (0, 24)    233332608.0
 (0, 25)    23677192.0
 (0, 26)    -315783392.0
 (0, 45)    157961968.0
 (0, 46)    173632816.0

我可以使用以下方法获取行索引、列索引和值的向量:

Knz = Ks.nonzero()
sparserows = Knz[0]
sparsecols = Knz[1]

#The Non-Zero Value of K at each (Row,Col) 
vals = np.empty(sparserows.shape).astype(np.float)
for i in range(len(sparserows)):

    vals[i] = K[sparserows[i],sparsecols[i]]

但是是否有可能提取稀疏CSR格式中所包含的向量(值、列索引、行指针)?

SciPy文档解释说,可以从这三个向量生成CSR矩阵,但我想做相反的事情,即将这三个向量提取出来。

我漏掉了什么吗?

感谢您的时间!

1个回答

22
value = Ks.data
column_index = Ks.indices
row_pointers = Ks.indptr

我认为这些属性是未记录的,这可能会使它们受到更改的影响,但我已经在几个版本的scipy上使用过它们。


3
但是请注意,indptr 是一种特殊的压缩格式数组。它与 coo 格式的 row 不同。Ks.nonzero 首先将 csr 数组转换为 coo 格式,然后返回其 rowcol 数组。 - hpaulj

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接