在运算时,会存在大量的稀疏矩阵,比如单位阵,会造成空间浪费。

这时就采用矩阵压缩的方式来表述,数据不变,存储形式发生改变,省很多空间。

即,scipy库中的sparse.csr_matrix(csr:Compressed Sparse Row marix)
sparse.csc_matric(csc:Compressed Sparse Column marix)

刚开始看官方文档有点儿拗,自己用官方样例详细解释了一遍,感觉理解容易多了

csr_matrix()

def test_csr():'''# 原始矩阵orig样例:orig = array([[1, 0, 2],[0, 0, 3],[4, 5, 6]])CSR: 按【行row】来压缩,便于理解,进行重命名count,就是官方的indptr,是一个递增数组含义:【差值】是统计原始矩阵每【行】【非0数据】的【个数】,反向理解,就是【累加】原始矩阵每行的【非0数据】的【个数】对于count数组,假设索引为i,count[i+1] - count[i]就是原始矩阵【第i行】的【非0数据】的【个数】样例:当i=0时,count[1] - count[0] = 2-0 = 2, 表示原始矩阵【第0行】的【非0数据】有【2个】当i=1时,count[2] - count[1] = 3-2 = 1, 表示原始矩阵【第1行】的【非0数据】有【1个】当i=2时,count[3] - count[2] = 6-3 = 3, 表示原始矩阵【第2行】的【非0数据】有【3个】index, 就是官方的indices,是一个【列索引】数组含义:对于CSR,这里就是【列】的索引,即表示原始矩阵当前行中的【非0数据】所在的【列索引值】对于index和count数组,假设索引为i,index[count[i]: count[i+1]]表示原始矩阵中【第i行】的【非0数据】所在的【列索引值】ps:注意中间是【冒号】样例:当i=0时,index[count[0]:count[1]] = index[0:2]= [0,2], 表示原始矩阵【第0行】的【2个】【非0数据】所在的【列索引值】为0和2,即定位为orig[0,0]和orig[0,2]当i=1时,index[count[1]:count[2]] = index[2:3]= [2], 表示原始矩阵【第0行】的【1个】【非0数据】所在的【列索引值】为2,即定位为orig[1,2]当i=2时,index[count[2]:count[3]] = index[3:6]= [0,1,2], 表示原始矩阵【第0行】的【3个】【非0数据】所在的【列索引值】为0,1,2,即定位为orig[2,0], orig[2,1]和orig[2,2]data,保持不变, 按行顺序,存储【非0数据】的数组含义:根据index数组找到每行中【非0数据】的【列索引值】,依次存取数据即可对于data和count数组,假设索引为i,data[count[i]: count[i+1]]表示原始矩阵中【第i行】的【非0数据】的【值】样例:当i=0时,data[count[0]:count[1]] = data[0:2]= [1,2], 表示原始矩阵【第0行】的【2个】【非0数据】,即定位为orig[0,0] =1 和orig[0,2]=2当i=1时,index[count[1]:count[2]] = index[2:3]= [2], 表示原始矩阵【第0行】的【1个】【非0数据】,即定位为orig[1,2]=3当i=2时,index[count[2]:count[3]] = index[3:6]= [0,1,2], 表示原始矩阵【第0行】的【3个】【非0数据】,即定位为orig[2,0]=4, orig[2,1]=5 和orig[2,2]=6'''count = np.array([0, 2, 3, 6])index = np.array([0, 2, 2, 0, 1, 2])data = np.array([1, 2, 3, 4, 5, 6])# 将稀疏矩阵转为原始矩阵orig = csr_matrix((data, index, count), shape=(3, 3)).toarray()# 将原始矩阵转为稀疏矩阵res = csr_matrix(orig)print(res.indptr) # [0 2 3 6] print(res.indices)# [0 2 2 0 1 2]print(res.data)# [1 4 5 2 3 6]print(orig)# [[1 0 2]#  [0 0 3]    # [4 5 6]]print(res)# (0, 0)        1# (0, 2)        2# (1, 2)        3# (2, 0)        4# (2, 1)        5# (2, 2)        6

csc_matrix()

def test_csc():'''# 原始矩阵orig样例:orig = array([[1, 0, 4],[0, 0, 5],[2, 3, 6]])CSC: 按【列col】来压缩,便于理解,进行重命名count,就是官方的indptr,是一个递增数组含义:【差值】是统计原始矩阵每【列】【非0数据】的【个数】,反向理解,就是【累加】原始矩阵每列的【非0数据】的【个数】对于count数组,假设索引为i,count[i+1] - count[i]就是原始矩阵【第i列】的【非0数据】的【个数】样例:当i=0时,count[1] - count[0] = 2-0 = 2, 表示原始矩阵【第0列】的【非0数据】有【2个】当i=1时,count[2] - count[1] = 3-2 = 1, 表示原始矩阵【第1列】的【非0数据】有【1个】当i=2时,count[3] - count[2] = 6-3 = 3, 表示原始矩阵【第2列】的【非0数据】有【3个】index, 就是官方的indices,是一个【行索引】数组含义:对于CSC,这里就是【行】的索引,即表示原始矩阵当前列中的【非0数据】所在的【行索引值】对于index和count数组,假设索引为i,index[count[i]: count[i+1]]表示原始矩阵中【第i列】的【非0数据】所在的【行索引值】ps:注意中间是【冒号】样例:当i=0时,index[count[0]:count[1]] = index[0:2]= [0,2], 表示原始矩阵【第0列】的【2个】【非0数据】所在的【行索引值】为0和2,即定位为orig[0,0]和orig[2,0]当i=1时,index[count[1]:count[2]] = index[2:3]= [2], 表示原始矩阵【第0列】的【1个】【非0数据】所在的【行索引值】为2,即定位为orig[2,1]当i=2时,index[count[2]:count[3]] = index[3:6]= [0,1,2], 表示原始矩阵【第0列】的【3个】【非0数据】所在的【行索引值】为0,1,2,即定位为orig[0,2], orig[1,2]和orig[2,2]data,保持不变, 按列顺序,存储【非0数据】的数组含义:根据index数组找到每列中【非0数据】的【行索引值】,依次存取数据即可对于data和count数组,假设索引为i,data[count[i]: count[i+1]]表示原始矩阵中【第i列】的【非0数据】的【值】样例:当i=0时,data[count[0]:count[1]] = data[0:2]= [1,2], 表示原始矩阵【第0列】的【2个】【非0数据】,即定位为orig[0,0] =1 和orig[2,0]=2当i=1时,index[count[1]:count[2]] = index[2:3]= [2], 表示原始矩阵【第0列】的【1个】【非0数据】,即定位为orig[2,1]=3当i=2时,index[count[2]:count[3]] = index[3:6]= [0,1,2], 表示原始矩阵【第0列】的【3个】【非0数据】,即定位为orig[0,2]=4, orig[1,2]=5 和orig[2,2]=6'''count = np.array([0, 2, 3, 6])index = np.array([0, 2, 2, 0, 1, 2])data = np.array([1, 2, 3, 4, 5, 6])# 将稀疏矩阵转为原始矩阵orig = csc_matrix((data, index, count), shape=(3, 3)).toarray()# 将原始矩阵转为稀疏矩阵res = csc_matrix(orig)print(res.indptr) # [0 2 3 6]print(res.indices)# [0 2 2 0 1 2]print(res.data)# [1 4 5 2 3 6]print(orig)# [[1 0 4]# [0 0 5]# [2 3 6]]print(res)# (0, 0)        1# (2, 0)        2# (2, 1)        3# (0, 2)        4# (1, 2)        5# (2, 2)        6

稀疏矩阵详解:csr_matrix和csc_matrix相关推荐

  1. python scipy 稀疏矩阵详解

    文章目录 稀疏矩阵格式 coo_matrix csr_matrix csc_matrix lil_matrix dok_matrix dia_matrix bsr_matrix 实用函数 经验总结 参 ...

  2. 十字链表 java_十字链表法,十字链表压缩存储稀疏矩阵详解

    对于压缩存储稀疏矩阵,无论是使用三元组顺序表,还是使用行逻辑链接的顺序表,归根结底是使用数组存储稀疏矩阵.介于数组 "不利于插入和删除数据" 的特点,以上两种压缩存储方式都不适合解 ...

  3. 十字链表法,十字链表压缩存储稀疏矩阵详解

    对于压缩存储稀疏矩阵,无论是使用三元组顺序表,还是使用行逻辑链接的顺序表,归根结底是使用数组存储稀疏矩阵.介于数组 "不利于插入和删除数据" 的特点,以上两种压缩存储方式都不适合解 ...

  4. 决策树原理详解及python代码实现

    决策树算法(信贷中常用来寻找规则) 1.算法原理 1.1 ID3(多叉树分类) 1.2 C4.5(多叉树分类) 1.3 Cart(二叉树分类+回归) 2.ID3.C4.5与Cart比较 3.算法优缺点 ...

  5. Apollo6.0代码Lattice算法详解——Part5: 生成横纵向轨迹

    Apollo6.0代码Lattice算法详解--Part5: 生成横纵向轨迹 0.前置知识 1.涉及主要函数 2.函数关系 3.部分函数代码详解 3.1 lattice_planner.cc中代码部分 ...

  6. python创建列向量_关于Numpy中的行向量和列向量详解

    关于Numpy中的行向量和列向量详解 行向量 方式1 import numpy as np b=np.array([1,2,3]).reshape((1,-1)) print(b,b.shape) 结 ...

  7. 与word2vec_NLP--Word2Vec详解

    注:其他有很多公式是用markdown写的,但头条显示不了,推荐大家在微信公众号阅读- 微信公众号:浩波的笔记 文章链接:Word2Vec详解:https://mp.weixin.qq.com/s?_ ...

  8. 数据结构与算法详解目录

    数据结构与算法详解是一本以实例和实践为主的图书,主要是经典的数据结构与常见算法案例,来自历年考研.软考等考题,有算法思路和完整的代码,最后提供了C语言调试技术的方法. 后续配套微课视频. 第0章  基 ...

  9. Word2Vec详解

    Word2Vec详解 这几天集中学习了Word2Vec,实现并不复杂,但是真正对一些细节有些了解还查阅了一些资料,今天在这里统一自己整理总结一下. 简介 首先说为什么会有Word2Vec,之前对文字的 ...

最新文章

  1. php中函数的定义格式,在php中函数定义的格式
  2. ElasticSearch源码解析(五):排序(评分公式)
  3. python爬虫实例-python爬虫实例大全
  4. flume与Mosquitto的集成
  5. 21.3.3 原子性与易变性 21.3.4 原子类
  6. SAP Spartacus User form通过label标签的实现原理
  7. linux多台主机对比文件大小,Linux主机df和du出来的文件和磁盘大小不相同
  8. 【如意影视】运营级+完整类库+解析线路+无限增加或删减解析接口+如意可视化播放器1.1
  9. vue怎么编辑已有视频_手机制作短视频、VLOG用啥App?~~
  10. 21.策略模式(Strategy Pattern)
  11. [CF592D]Super M
  12. 电动汽车续航标准傻傻分不清楚?别再被车企的等速续航骗了!
  13. 学考计算机会考考点工作总结,高中生学业水平考试工作总结范文
  14. 20分钟让你了解OpenGL——OpenGL全流程详细解读
  15. CSS实现的带头像的彩色垂直菜单源码
  16. 开发微信小程序所需要的http服务器搭建
  17. 电脑强制关机会有什么影响
  18. C语言万年历输出月份,C语言输出万年历
  19. 如何设置app字体跟随系统_Android 应用全局字体调节或禁止随系统字体大小更改...
  20. Mac 远程连接 Windows 桌面工具 Parallels Client 使用教程

热门文章

  1. 阿里巴巴矢量库icon font的使用
  2. 解决keras安装之后无法使用的问题
  3. springboot项目创建和启动
  4. php如何读取文件,PHP如何读取文件内容?,懂得这些技巧就够了
  5. python吃显卡还是内存条_加内存条还是加显卡??
  6. 2021建筑施工电工(建筑特种作业)机考题库及建筑电工模拟试题
  7. QT之QLineEdit——实现鼠标点击事件
  8. 服务器运维登记表,日常运维记录表-20210627032441.pdf-原创力文档
  9. word2007表格计算机,【word2007的表格怎么拆分?这个计算机技能别说你还不会】- 环球网校...
  10. 【电子刊物制作软件】名编辑电子杂志大师教程 | 自动翻页设置