正确理解scipy中的coo_matrix函数

  • 1. 构造一个空矩阵
  • 2. 使用ijv(triplet)格式构造一个矩阵
  • 3. 用重复的索引构造矩阵

1. 构造一个空矩阵

这种用法比较简单,直接生成一个给定维度的矩阵,并且可以指定元素类型。
如下指定生成一个(3,4)且数据类型为int8的矩阵

import scipy.sparse as sp
sp.coo_matrix((3, 4), dtype=np.int8).toarray()output:
array([[0, 0, 0, 0],[0, 0, 0, 0],[0, 0, 0, 0]], dtype=int8)

2. 使用ijv(triplet)格式构造一个矩阵

  • data[:] 就是原始矩阵中的数据,例如上面的4,5,7,9;
  • i[:] 就是行的指示符号;例如上面row的第0个元素是0,就代表data中第一个数据在第0行;
  • j[:] 就是列的指示符号;例如上面col的第0个元素是0,就代表data中第一个数据在第0列;

data中的数据刚好存在如下关系:

4:第0行第0列
5:第3行第3列
7:第1行第1列
9:第0行第2列

然后其余元素全部填充为0

row  = np.array([0, 3, 1, 0])
col  = np.array([0, 3, 1, 2])
data = np.array([4, 5, 7, 9])
coo_matrix((data, (row, col)), shape=(4, 4)).toarray()output:
array([[4, 0, 9, 0],[0, 7, 0, 0],[0, 0, 0, 0],[0, 0, 0, 5]])

3. 用重复的索引构造矩阵

第三种看文档我当时看了半天,泪崩~
怎么理解呢?如下:
同样,data中的元素仍然是作为数据,row和col仍然构成数据在矩阵中的下标。
重复咋整啊???
看到反复提到duplicate还有summed关键字的注释,大概就懂了。


也就是说如果row和col仍然构成数据在矩阵中的下标出现了重复情况,那么直接把这些下标下的value进行叠加,最终的和放入该位置即可。
例如:

data中的第一个元素为1,对应的row和col为(0,0),故存放在第0行第0列位置
...
data中的第6个元素为1,对应的row和col为(0,0),故存放在第0行第0列位置
data中的第7个元素为1,对应的row和col为(0,0),故存放在第0行第0列位置
按照规则,直接进行累加:1+1+1 = 3
所以最终第0行第0列存放元素为3
以此类推...
# Constructing a matrix with duplicate indices
row  = np.array([0, 0, 1, 3, 1, 0, 0])
col  = np.array([0, 2, 1, 3, 1, 0, 0])
data = np.array([1, 1, 1, 1, 1, 1, 1])
coo = sp.coo_matrix((data, (row, col)), shape=(4, 4))
# Duplicate indices are maintained until implicitly or explicitly summed
np.max(coo.data)
coo.toarray()output:
array([[3, 0, 1, 0],[0, 2, 0, 0],[0, 0, 0, 0],[0, 0, 0, 1]])

更多细节可以查看coo_matrix函数


当然,以上仅为个人参照官方文档的一点总结,可能个人说的会存在不好的地方。
大家可以在留言中call我,我会积极探讨,相互进步。

正确理解scipy中的coo_matrix函数相关推荐

  1. 理解javascript中的回调函数(callback)【转】

    在JavaScrip中,function是内置的类对象,也就是说它是一种类型的对象,可以和其它String.Array.Number.Object类的对象一样用于内置对象的管理.因为function实 ...

  2. python的上下文管理用哪个关键字_正确理解python中的关键字“with”与上下文管理器...

    正确理解python中的关键字"with"与上下文管理器 来源:中文源码网    浏览: 次    日期:2018年9月2日 [下载文档:  正确理解python中的关键字&quo ...

  3. 理解javascript中的回调函数(callback)

    理解javascript中的回调函数(callback) 在JavaScrip中,function是内置的类对象,也就是说它是一种类型的对象,可以和其它String.Array.Number.Obje ...

  4. 正确理解WPF中的TemplatedParent

    原文:正确理解WPF中的TemplatedParent http://www.cnblogs.com/mgen/archive/2011/08/31/2160581.html (注:Logical T ...

  5. matlab计算正负零序分量,5分钟教你正确理解电力系统中的正序负序零序.doc

    5分钟教你正确理解电力系统中的正序负序零序 电力 三相不平衡 作图法 对称分量法 1:三相不平衡的的电压(或电流),可以分解为平衡的正序.负序和零序 2:零序为3相电压向量相加,除以3 3:正序将BC ...

  6. scipy 中的whiten函数

    调用kmeans函数,kmeans中调用了whited函数.查后,发现whiten是对输入数据按标准差做归一化处理. variance=Σi=1n(xi−xmean)2nvariance = \fra ...

  7. 匿名函数php作用,深入理解PHP中的匿名函数

    匿名函数的作用就是扩大函数的使用功能,在PHP(PHP培训 php教程 ) 5.3以前,传递Callback的方式,我们只有俩种选择: ◆字符串的函数名 ◆使用create_function的返回 在 ...

  8. php中empty功能,深入理解PHP中的 empty()函数

    这篇文章主要介绍了PHP中的 empty()函数,有一定的参考价值,感兴趣的朋友可以参考一下,希望对你有所帮助! 从表面上看,很容易误解empty()函数是判断字符串是否为空的函数,其实并不是,我也因 ...

  9. 2.如何正确理解古典概率中的条件概率《zobol的考研概率论教程》

    写本文主要是帮助粉丝理解考研中的古典概率-条件概率的具体定义. "B事件发生的条件下,A事件发生的概率"? "在A集合内有多少B的样本点"? "在B约 ...

最新文章

  1. c#_String.Split 方法进阶篇
  2. Oracle常用系统表
  3. SAP的标准对话框函数
  4. web项目的创建和发布
  5. @ResponseBody ResponseEntity
  6. linux fall delay 10,Cell的Rise delay和Fall delay、Rise transition和fall transition
  7. STL之修改集合里边元素的顺序
  8. Python列表常用函数使用详解(内附详细案例)
  9. mysql 高并发 卡死,高并发中的卡死状态 -HashMap
  10. python高斯核函数_python 实现高斯核与卷积过程
  11. 如何更改微信标签名字_微信标签怎么设置?微信怎么批量设置好友标签?
  12. java数据结构与算法之顺序表与链表深入分析
  13. linux uac 设备,USB Audio Class (UAC) 分析
  14. 虹软人证核验增值版-node.js调用C++SDK
  15. 探索多层次内存系统的页面管理设计空间Exploring the Design Space of Page Management for Multi-Tiered Memory Systems
  16. 一线大厂php高级面试题_高级php面试题总结分享
  17. socket是什么?套接字是什么?
  18. Glide.Placeholder(loadingImage) 之后 Glide 载图片不显示问题
  19. 中国高科技企业在忙什么(聚焦)
  20. leslie模型matlab代码6,leslie模型人口预测程序,请求大家!

热门文章

  1. MapReduce读写orc文件
  2. 解决github无法访问的办法
  3. 发网易emil 报错javax.mail.AuthenticationFailedException: 550
  4. 转:《音响世界》十年音响示范唱片
  5. ios-SDK开发(1)
  6. tree树形控件之循环遍历
  7. Ubuntu安装破解版MATLAB及问题解决
  8. 匿名类有名字还叫匿名类吗?
  9. STM32F429串口设置调试笔记
  10. 暴力破解及端口扫描详解