问题 来自scipy CSR稀疏矩阵的访问值,列索引和row_ptr数据


我有一个大矩阵,我想转换为稀疏的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矩阵,但我想做相反的事情,将这三个向量输出。

我错过了什么?

谢谢你的时间!


11601
2018-04-28 03:02


起源



答案:


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

我相信这些属性没有文档可能会使它们发生变化,但我已经在几个版本的scipy上使用它们了。


15
2018-04-28 15:30



但要注意。 indptr 是一种特殊的压缩格式数组。它与...不一样 row 的 coo 格式。 Ks.nonzero 首先转换 csr 数组到 coo 格式,并返回它 row 和 col 阵列。 - hpaulj


答案:


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

我相信这些属性没有文档可能会使它们发生变化,但我已经在几个版本的scipy上使用它们了。


15
2018-04-28 15:30



但要注意。 indptr 是一种特殊的压缩格式数组。它与...不一样 row 的 coo 格式。 Ks.nonzero 首先转换 csr 数组到 coo 格式,并返回它 row 和 col 阵列。 - hpaulj