Python scipy.csr_matrix() SCR矩阵压缩方法简单理解

CSR方法采取按行压缩的办法, 将原始的矩阵用三个数组进行表示

from scipy import sparse
data = np.array([1, 2, 3, 4, 5, 6])         #所有的非零数值
indices = np.array([0, 2, 2, 0, 1, 2])      #所有值得列索引
indptr = np.array([0, 2, 3, 6])             #每行的的非零数据 data[ indptr[i]:indptr[i+1] ]
csrmatrix = sparse.csr_matrix((data,indices,indptr),shape=(3,3))

1、首先是考虑每行的非零数值,数值在data里,

data里的6个数据的索引在indptr中,indptr中每个值是每行中第一个值在data中的索引。

故矩阵第0行 data[ indptr[0]: indptr[1] ], 即data[0:2], 为数据1,2;

2、这些数值的列索引

由于已经得到矩阵中每行的非零数值,而所有的非零数值的列索引又存在indices中,则把这些数值对应的索引找出来就ok了

indptr[0], indptr[1],对应数值data[ indptr[0] ]和data[ indptr[1] ],在indices中对应的列索引为indices[ indptr[0]: indptr[1] ] 即 indices[0:2] , 为0, 2

3、对第i行

非零数值有data[ indptr[i]: indptr[i+1] ]

非零数值的列索引有indices[ indptr[i]: indptr[i+1] ]

最终即可得到第i行所有矩阵的结果。

总结:三个数组中data最好理解所有非零数值,indices值对应每一个数值的列索引,每行的值得索引在indptr中(本行的第一个数值索引开始,到下一行第一个数值开头结束),从而得到每行值的数值个数,再去indices中配对列索引,然后构造矩阵。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值