scipy.sparse.coo_matrix、csr_matrix、lil_matrix、dia_matrix
文章目录
- coo_matrix
- csr_matrix
- lil_matrix
- dia_matrix
coo_matrix
1.coo
啥意思?COOrdinate
(坐标)
2.那么coo_matrix
又是一个啥?这么跟你说吧,稀疏矩阵有很多表示的方法,其中coo_matrix
是一种,其表示稀疏矩阵所用的方法名字就叫做COOrdinate
或者叫做ijv
,triplet
A sparse matrix in COOrdinate format.Also known as the ‘ijv’ or ‘triplet’ format.
首先,我们要明白,矩阵可以看作是一个坐标,每一个坐标上都有一个值。
怕你英语不好
- ijv:(i,j,value),其中i,j都行索引,列索引,value是坐标(i,j)上的值。
- triplet:三元组,也是一个意思。
3.coo_matrix的构造方法:
直接构造法
from scipy.sparse import coo_matrix
row = np.array([0, 3, 1, 0])#i
col = np.array([0, 3, 1, 2])#j
data = np.array([4, 5, 7, 9])#v
coo_matrix((data, (row, col)), shape=(4, 4)).toarray()
结果如下:
array([[4, 0, 9, 0],
[0, 7, 0, 0],
[0, 0, 0, 0],
[0, 0, 0, 5]])
可以看到,矩阵(0,0)上的值4,正好对应于ijv格式,或者叫做坐标格式。
间接构造法
from scipy.sparse import coo_matrix
a=np.identity(3)#n=3的单位矩阵
coo_matrix(a).toarray()
array([[1., 0., 0.],
[0., 1., 0.],
[0., 0., 1.]])
我们上面是先构造一个其他类型的矩阵,然后把他转化成coo_matrix.
csr_matrix
Compressed Sparse Row matrix
矩阵有行有列,为什么偏偏这里要说行row?这也和其表示有关,其思想是:你需要告诉我每一行都有哪些列有值(即非零),以及值是什么。
所以有了如下:
data = np.array([1, 2, 3, 4, 5, 6])
indices = np.array([0, 2, 2, 0, 1, 2])
data就是值了,indices指的就是这些值对应的是哪一列,不过不对啊,没有说对应哪一行?所以我们还有一个参数:
indptr = np.array([0, 2, 3, 6])
上面这个参数,告诉我们indices
中哪些列是属于第一行的,哪些列是属于第二行的,。。。。我们来看看indptr
,其有4个数,表示一共有3行,因为可以划分成[0,2),[2, 3),[3, 6),这表示indices
中[0,2)(即前两个数)属于第0行,其他依次类推。我们发现indices
中的6个数刚好分配到3行中去。
明白了原理之后,我们可以构造csr_matrix,方法如下:
标准构造
import numpy as np
from scipy.sparse import csr_matrix
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])
csr_matrix((data, indices, indptr), shape=(3, 3)).toarray()
array([[1, 0, 2],
[0, 0, 3],
[4, 5, 6]])
其他构造
我们可以使用前一小节介绍的两种方法构造也行,只需将coo_matrix改成csr_matrix。
lil_matrix
Row-based list of lists sparse matrix
This is a structure for constructing sparse matrices incrementally. Note that inserting a single item can take linear time in the worst case; to construct a matrix efficiently, make sure the items are pre-sorted by index, per row.
那么其到底是怎么实现的呢?
说白了,由于我们是稀疏矩阵,也就是说0多非0少,所以总原则仍然是只存储非0元素。
上面的图片不知道你看懂了没有,我们可以举一个例子:
import numpy as np
from scipy.sparse import lil_matrix
a=np.random.randint(0,2,(2,3))
print(a)
spa = lil_matrix(a)
print(spa)
有人会说,这个怎么这么像第一种坐标表示形式。一点区别都没有啊。其实,只是这里打印print会这样显示而已。内部其实不是这样的,而是:
索引:[[0],[1]]每一行都是一个列表,第一行就是[0],第二行就是[1]。这代表(1,1}有值,如果是[[0],[1,2]],就代表(1,1),(1,2)都有值
值:[[1],[1]]和上面一一对应的值。
而且值得一提的是,每一行里面的值是顺序增大的,也就是说:(0,0),(0,1)有值,里面会写成[[0,1]],而不是[[1,0]]。
所以说,你可以看到,这种稀疏存储结构,如果你在一行的后面插入新的元素,这个形式很方便。只需要索引列表中append一下,值列表中append一下就可以。但是往一行的中间插入就不好了,需要查找然后定位插入位置。
另外,其优点是切片很方便,比如你要第一行的,这个超级快,只需要去索引中第一行和值中的第一行。取第一列也很快,把每一行的第一个数看一下是不是1就行,是就取出来。
即:
1.efficient for constructing sparse matrices incrementally
2.flexible slicing
dia_matrix
from scipy.sparse import dia_matrix
Sparse matrix with DIAgonal storage
也就是说其存储的方式是按照对角线来存储,比如如果其是一个三对角矩阵,那么其只需要存储3行,[-1,0,1],但是这3行中如果有0,也必须存储。
比如下面的5*5的全0矩阵,假设其是3对角矩阵,即只有3个对角线上有非零值,其他为0,那么按照对角存储的时候,我们应该提供:
应该提供:
a=np.array([[1,2,3,0,2],[2,0,2,3,4],[1,0,0,3,4]])
offsets=np.array([0,1,-1])#表示上面的第一行是0对角线上的值。
#第二行是1对角线上的值。
那么就有一个问题了,5*5的矩阵,主对角线上(0对角线)确实有5个元素,那为什么1对角线(上面那个对角)也有5个元素呢?不应该是4个吗?
答案:确实是4个,有一个其实是多余的。那个多余的值你可以随便填什么,都不会有影响。
dia_matrix((a, offsets), shape=(5, 5)).toarray()
可以看到对于1对角线,我们提供第一个元素是多余的,-1对角线最后一个元素是多余的。
scipy.sparse.coo_matrix、csr_matrix、lil_matrix、dia_matrix相关推荐
- scipy.sparse.coo_matrix
scipy.sparse.coo_matrix scipy.sparse.coo_matrix(arg1, shape=None, dtype=None, copy=False) 坐标格式的稀疏矩阵. ...
- scipy.sparse csr_matrix()
使用scipy.sparse的稀疏矩阵csr_matrix() 创建方法 1.可以传入一个dense矩阵或numpy array import scipy.sparse as sp import nu ...
- Scipy.sparse中coo_matrix、csc_matrix、csr_matrix、lil_matrix辨析
简介 1. coo_matrix: 坐标格式的矩阵(Coodrdinate format matrix) data = [1, 1, 1] row = [0, 1, 1] col = [0, 1, 1 ...
- Scipy.sparse模块中的coo_matrix、csc_matrix、csr_matrix函数
三种函数的英文全名,首先是从表面意思上入手. coo_matrix :COOrdinate format matrix(坐标格式矩阵) csc_matrix:Compressed Sparse Col ...
- Scipy.sparse模块中coo_matrix、csc_matrix、csr_matrix区别
Scipy.sparse模块常用的三种具体形式 coo_matrix :COOrdinate format matrix csc_matrix :Compressed Sparse Column ma ...
- scipy.sparse、pandas.sparse、sklearn稀疏矩阵的使用
单机环境下,如果特征较为稀疏且矩阵较大,那么就会出现内存问题,如果不上分布式 + 不用Mars/Dask/CuPy等工具,那么稀疏矩阵就是一条比较容易实现的路. 文章目录 1 scipy.sparse ...
- scipy.sparse.csr_matrix函数和coo_matrix函数
Scipy高级科学计算库:和Numpy联系很密切,Scipy一般都是操控Numpy数组来进行科学计算.统计分析,所以可以说是基于Numpy之上了.Scipy有很多子模块可以应对不同的应用,例如插值运算 ...
- 计算机视觉(三):基于Scipy图像处理技术,图像模糊(灰色、彩色图像高斯模糊)、图像导数(sobel算子滤波)
文章目录 一.scipy方法实现图像模糊 1.灰度图像模糊 2.彩色图像模糊 二.图像导数 1.梯度的计算 2.导数的计算 一.scipy方法实现图像模糊 小花今天和我说:"她想要一种朦胧美 ...
- python 的csr_Python scipy.sparse.csr_matrix()[csc_matrix()]
csr_matrix是Compressed Sparse Row matrix的缩写组合,下面介绍其两种初始化方法 csr_matrix((data, (row_ind, col_ind)), [sh ...
最新文章
- c语言实参的默认存储类型,2016下半年软考程序员练习习题及答案解析(一)
- MongoDB和Java(4):Spring Data整合MongoDB(XML配置)
- asp.net学习笔记·文件上传
- C#中变量(成员变量、局部变量、全局变量)的作用域
- weblogic jprofile配置
- [转载]Docker的安装配置及使用详解
- 【项目篇-项目创新点怎么写?(两千字图文总结建议)】创新创业竞赛项目计划书、新苗国创(大创)申报书
- Win7 32bit 扫雷外挂
- Matlab实现图像高斯滤波(公开代码)
- 在Linux下安装软件
- 51单片机电路原理图_51单片机入门(第1篇):纯干货,单片机最小系统
- window.performance(监控网页与程序性能)
- [渝粤教育] 中国地质大学(武汉) 走近国粹 中国陶瓷 参考 资料
- opc服务器不显示目录,opc客户端搜不到opc服务器
- webpack 5.5.1 compiled with 1 error in 63 ms
- shineblink MQ-3酒精浓度探测
- 交换机远程连接(eNsp)
- vc2010串口通信(使用mscomm控件)
- 微信小程序--小程序及微信生态圈
- 关于Bootstrap的一些使用
热门文章
- App Store内购机制
- 【民间图灵奖】读《图灵的秘密》写读后感获图灵水杯
- DivCo: Diverse Conditional Image Synthesis via Contrastive Generative Adversarial Network
- Nature:将光计算与AI推理整合,实现高速高带宽低功耗AI计算
- 重磅!2021泰晤士世界大学排名公布,清华排名首次挺进top20
- 报名 | 高级管理人员AI大数据能力研修班
- 近期活动盘点:2019清华大数据系统软件峰会(9.15)
- 独家 | 高季尧:定制化优化算法的应用与威力(附PPT)
- 剑指offer:机器人的运动范围
- 跨年之际,中文版畅销书《TensorFlow深度学习实战大全》分享,直接送!