我有一个很大的矩阵,我想将其转换为稀疏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矩阵,但我想做相反的事情,即将这三个向量提取出来。
我漏掉了什么吗?
感谢您的时间!
indptr
是一种特殊的压缩格式数组。它与coo
格式的row
不同。Ks.nonzero
首先将csr
数组转换为coo
格式,然后返回其row
和col
数组。 - hpaulj