【问题标题】:Access value, column index, and row_ptr data from scipy CSR sparse matrix从 scipy CSR 稀疏矩阵访问值、列索引和 row_ptr 数据
【发布时间】:2012-05-08 18:24:39
【问题描述】:

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

我错过了什么?

感谢您的宝贵时间!

【问题讨论】:

    标签: python scipy sparse-matrix csr


    【解决方案1】:
    value = Ks.data
    column_index = Ks.indices
    row_pointers = Ks.indptr
    

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

    【讨论】:

    • 但要小心。 indptr 是一个特殊的压缩格式数组。它与coo 格式的row 不同。 Ks.nonzero 首先将csr 数组转换为coo 格式,然后返回rowcol 数组。
    猜你喜欢
    • 2019-12-03
    • 2012-01-15
    • 2021-08-03
    • 1970-01-01
    • 1970-01-01
    • 2019-08-09
    • 2016-10-29
    • 2017-12-04
    • 2021-10-30
    相关资源
    最近更新 更多