注意CSC CSR 的indptr表示的是一个区间,左开右闭,按照mXn的形状进行区分的,具体是m还是n要看是CSR(m行) 还是CSC(n列)

稀疏矩阵定义

(1)Coordinate (COO)

>>> row = np.array([0, 3, 1, 0])
>>> col = np.array([0, 3, 1, 2])
>>> data = np.array([6, 5, 7, 8])
>>> sparse.coo_matrix((data, (row, col)), shape=(4, 4)).toarray()
array([[6, 0, 8, 0],[0, 7, 0, 0],[0, 0, 0, 0],[0, 0, 0, 5]])

这是最简单的一种格式,每一个元素需要用一个三元组来表示,分别是(行号,列号,数值),对应上图右边的一列。这种方式简单,但是记录单信息多(行列),每个三元组自己可以定位,因此空间不是最优。

(2)Compressed Sparse Column (CSC)

>>> indptr = np.array([0, 2, 3, 6])
>>> indices = np.array([0, 2, 2, 0, 1, 2])
>>> data = np.array([1, 2, 3, 4, 5, 6])
>>> sparse.csc_matrix((data, indices, indptr), shape=(3, 3)).toarray()
array([[1, 0, 4],[0, 0, 5],[2, 3, 6]])

CSC是按列存储一个稀疏矩阵的。其中indptr中的数据代表矩阵中每一列所存的数据在data中的开始和结束的索引,例如这里indptr为[0, 2, 3, 6],即表示在data中,索引[0, 2)为第一列的数据,索引[2, 3)为第二列的数据,索引[3, 6)为第三列的数据。而indices中的数据代表所对应的data中的数据在其所在列中的所在行数,例如,这里的indices为[0, 2, 2, 0, 1, 2],表示在data中,数据1在第0行,数据2在第2行,数据3在第2行,数据4在第0行,数据5在第一行,数据6在第2行。从而建立起一个稀疏矩阵。

(3)Compressed Sparse Row (CSR)

>>> indptr = np.array([0, 2, 3, 6])
>>> indices = np.array([0, 2, 2, 0, 1, 2])
>>> data = np.array([1, 2, 3, 4, 5, 6])
>>> sparse.csr_matrix((data, indices, indptr), shape=(3, 3)).toarray()
array([[1, 0, 2],[0, 0, 3],[4, 5, 6]])

CSR是按行来存储一个稀疏矩阵的,其原理与CSC类似。indptr中的数据表示矩阵中每一行的数据在data中开始和结束的索引,而indices中的数据表示所对应的在data中的数据在矩阵中其所在行的所在列数。可以看出,在indptr、indices和data三个数组相同的情况下,通过CSC和CSR分别表示出来的矩阵互为转置关系。

作者:蒋佳秋
链接:https://www.jianshu.com/p/9671c568096d

https://www.jianshu.com/p/9671c568096d

scipy中的csr_matrix详解

https://blog.csdn.net/ChenglinBen/article/details/84426942

转牛人博客 稀疏矩阵定义CSR COO CSC 第一个讲的清晰易懂的人相关推荐

  1. Android牛人博客集合

    最近看到别人两个月时间锻炼成安卓大神,真心牛逼,每晚两点多睡,向他人学习! 两个月学会安卓并且技术还是大神的博客地址 http://blog.csdn.net/u011068702/article/c ...

  2. 计算机视觉领域的一些牛人博客,超有实力的研究机构等的网站链接(转 )

    计算机视觉领域的一些牛人博客,超有实力的研究机构等的网站链接 (1)googleResearch: http://research.google.com/index.html (2)MIT博士,汤晓欧 ...

  3. GitHub 优秀的 Android 开源项目 淘宝技术牛p博客整理开发中最常用的GitHub上 优秀的 Android 开源项目整理(精品)...

    原文地址为http://www.trinea.cn/android/android-open-source-projects-view/,作者Trinea 主要介绍那些不错个性化的View,包括Lis ...

  4. uliweb新教程--多人博客系统开发

    2019独角兽企业重金招聘Python工程师标准>>> 开始写一个uliweb的新教程,主要围绕着一个多人博客系统的开发来写.下面是我想实现的功能: blog功能 blog首页展示 ...

  5. 四、Java多人博客系统-2.0版本

    由于时间关系,多人博客系统这里穿插一个2.0版本. 2.0版本本来是打算用于建立个人网站,但是后来发现个人建站需要购买域名服务器,还需要备案,很繁琐.最终放弃.完成此版本,最终也只是作为技术演练.此版 ...

  6. 第1章 Express MongoDB 搭建多人博客

    学习环境 Node.js : 0.10.22 + Express : 3.4.4 + MongoDB : 2.4.8 + 快速开始 安装 Express express 是 Node.js 上最流行的 ...

  7. Mblog 开源Java多人博客系统

    Mblog 开源Java多人博客系统 技术选型: JDK8 MySQL Spring-boot Spring-data-jpa Shiro Hibernate-search Ehcache Freem ...

  8. nodejs实战《一起学 Node.js》 使用 Express + MongoDB 搭建多人博客

    GitHub: https://github.com/nswbmw/N-blog N-blog 使用 Express + MongoDB 搭建多人博客 开发环境 Node.js: 6.9.1 Mong ...

  9. 多人博客管理系统登录功能

    多人博客管理系统 目标 能够知道搭建项目环境的步骤 能够理解模板优化 熟悉登录功能的思路逻辑 知道密码为什么需要加密 知道cookie跟session是什么 能够参照笔记写出登录功能 功能需求 博客内 ...

最新文章

  1. Exchange server 2010脱机工作簿故障问题
  2. solidwork2019/2020安装后出现无法获得许可证
  3. 详解js中typeof、instanceof与constructor
  4. sqlserver 储存过程 批量更新_大白菜怎么储存过冬,好吃还不烂?掌握方法,其实很简单...
  5. python @修饰符_数据结构与算法之8——抽象数据类型与python类
  6. UI设计灵感|手机钱包App怎样设计才更便捷?
  7. 从Slice_Header学习H.264(二)--片头的子语法项目
  8. 建材物资管理系统(软件定义)
  9. android 色彩搭配,设计学堂:关于APP配色的一些常用色彩搭配技巧
  10. JavaWeb学习-动态代理-2-invoke()方法和动态代理Waiter类练习
  11. Oracle异常自我总结
  12. 50欧姆 50Ω 同轴双端口衰减器(DC-40GHz ;2W---10KW)
  13. FDTD超表面仿真详细教程,几何相位,共振相位,传播相位
  14. 10g ASM下加控制文件 .
  15. 微信小程序 之 程序题
  16. ScriptManager.RegisterStartupScript方法
  17. 2、STM32CubeMX软件的使用
  18. 【HoloLens2学习】基于TCP/IP的无人机操控飞行
  19. java excel 电话号码_java使用poi读取excel时,电话号码变成了科学计数法,整数变成double,怎么改过来...
  20. 世界杯赛事超清画质看不清?为什么直播画质不清晰?

热门文章

  1. python中的turtle函数_1.常用turtle功能函数
  2. 为了撩妹用Python做了一个办公小工具,她说棒极了
  3. mysql 存储过程 格式化_转 mysql 存储过程初探
  4. mysql trigger before insert_在MYSQL中创建一个BEFORE INSERT TRIGGER
  5. python postmessage_解惑:Postmessage函数模拟鼠标单击指定坐标
  6. jquery实现app开发闹钟功能_APP商城开发的优势与功能
  7. java集合 stack_Java集合之Stack
  8. 使用指针输入输出一维数组
  9. mysql python 接口_Python中的MySQL接口:PyMySQL MySQLdb
  10. mysql如何存储表情,如何让mysql支持存储表情