①行压缩矩阵:scipy.sparse.csr_matrix(arg1, shape=None, dtype=None, copy=False)

构造方法:

1、通过csc_matrix(D)形式构造,其中D的维度必须小于等于2

In [1]: import  numpy as np
...: from scipy.sparse import csr_matrix
...: arr = np.array([[0,1,0,2,0],[1,1,0,2,0],[2,0,5,0,0]])
...: b = csr_matrix(arr)
...:
In [2]: b
Out[2]:
<3x5 sparse matrix of type '<class 'numpy.int32'>'
with 7 stored elements in Compressed Sparse Row format>
In [3]: type(b)
Out[3]: scipy.sparse.csr.csr_matrix

csr_matrix对象属性:

In [4]: b.shape
Out[4]: (3, 5)In [5]: b.nnz
Out[5]: 7In [6]: b.ndim
Out[6]: 2In [7]: b.data
Out[7]: array([1, 2, 1, 1, 2, 2, 5], dtype=int32)In [8]: b.indices
Out[8]: array([1, 3, 0, 1, 3, 0, 2], dtype=int32)In [9]: b.indptr
Out[9]: array([0, 2, 5, 7], dtype=int32)

nnz属性:稀疏矩阵非零元素个数

data属性:稀疏矩阵中元素

indices属性:稀疏矩阵非0元素对应的列索引值所组成数组

indptr属性:第一个元素0,之后每个元素表示稀疏矩阵中每行元素(非零元素)个数累计结果

2、通过csc_matrix((data, indices, indptr), [shape=(M, N)])形式构造

In [10]: import numpy as np...: from scipy.sparse import csr_matrix...: indptr = np.array([0,3,5,7,8])...: indices = np.array([0,2,4,1,3,2,4,0])...: data = np.array(range(1,9))...: csr_matrix((data,indices,indptr),shape=(4,5)).toarray()...:
Out[10]:
array([[1, 0, 2, 0, 3],[0, 4, 0, 5, 0],[0, 0, 6, 0, 7],[8, 0, 0, 0, 0]])

结论:①indptr数组中最后一个元素等于data数组的长度 ②indptr数组长度减1等于矩阵的行数

③对于矩阵第i行其列索引编号:indices[indptr[i]:indptr[i+1]];对于矩阵第i行其索引列对应的数据:data[indptr[i]:indptr[i+1]]

data数组与最后稀疏矩阵转换成的数组的映射过程:

矩阵第一行:即i=0,索引编号为indices[indptr[0]:indptr[1]],其中indptr[0]=0,indptr[1]=3,则indices[indptr[0]:indptr[1]]=indices[0:3]=[0,2,4],说明矩阵的第一行的第1、3、5列为非0数据,该行其他列都为0

矩阵第一行的1、3、5列存放具体值:data[indptr[i]:indptr[i+1]]=data[0:3]=[1,2,3],表名第1列存放1、第3列存放2、第5列存放3

3、通过csr_matrix((data, (row_ind, col_ind)), [shape=(M, N)])形式构造,data表示矩阵元素,row_ind表示矩阵行编号,col_ind表示矩阵列编号

In [11]: import numpy as np...: from scipy.sparse import csr_matrix...: row = np.array([0,0,0,1,1,2,2,3])...: col = np.array([0,2,4,1,3,2,4,0])...: data = np.array(range(1,9))...: csr_matrix((data,(row,col)),shape=(4,5)).toarray()...:
Out[11]:
array([[1, 0, 2, 0, 3],[0, 4, 0, 5, 0],[0, 0, 6, 0, 7],[8, 0, 0, 0, 0]], dtype=int32)

结论:row、col、data三数组长度相等,矩阵k行k列元素:a[row_ind[k], col_ind[k]] = data[k]

4、通过csr_matrix((M, N), [dtype])形式构建空矩阵

In [12]: import numpy as np...: from scipy.sparse import csr_matrix...: csr_matrix((4,3))...:
Out[12]:
<4x3 sparse matrix of type '<class 'numpy.float64'>'with 0 stored elements in Compressed Sparse Row format>

5、通过csr_matrix(S)形式构建,其中S为矩阵

In [13]: import numpy as np...: from scipy.sparse import csr_matrix...: arr = np.array([0,1,0,2,3,0,5,6,0,1,0,2]).reshape(3,4)...: csr_matrix(np.matrix(arr))...:
Out[13]:
<3x4 sparse matrix of type '<class 'numpy.int32'>'with 7 stored elements in Compressed Sparse Row format>


scipy.sparse学习相关推荐

  1. 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又是 ...

  2. scipy笔记:scipy.sparse

    1 稀疏矩阵介绍 在networkx包中,很多运算返回的是sparse matrix(如nx.laplacian_matrix),这是稀疏矩阵格式.隶属于scipy.sparse import net ...

  3. scipy.sparse.csr_matrix函数和coo_matrix函数

    Scipy高级科学计算库:和Numpy联系很密切,Scipy一般都是操控Numpy数组来进行科学计算.统计分析,所以可以说是基于Numpy之上了.Scipy有很多子模块可以应对不同的应用,例如插值运算 ...

  4. 关于稀疏矩阵转化为稠密矩阵问题 (scipy.sparse格式和tensor稀疏张量格式)

    scipy.sparse: todense() pytorch中的稀疏张量tensor: to_dense()

  5. python 的csr_Python scipy.sparse.csr_matrix()[csc_matrix()]

    csr_matrix是Compressed Sparse Row matrix的缩写组合,下面介绍其两种初始化方法 csr_matrix((data, (row_ind, col_ind)), [sh ...

  6. scipy.sparse、pandas.sparse、sklearn稀疏矩阵的使用

    单机环境下,如果特征较为稀疏且矩阵较大,那么就会出现内存问题,如果不上分布式 + 不用Mars/Dask/CuPy等工具,那么稀疏矩阵就是一条比较容易实现的路. 文章目录 1 scipy.sparse ...

  7. scipy.sparse求稀疏矩阵前k个特征值

    背景: 要在python中处理7000*7000的稀疏矩阵,计算前k小的特征值和相应的特征向量.不想在matlab中做这件事了,所有的数据预处理和展现工作都想在python中完成.然而一般的linal ...

  8. scipy.sparse.vstack

    参考  https://cloud.tencent.com/developer/article/1525041 scipy.sparse.vstack(blocks, format=None, dty ...

  9. scipy.sparse的一些整理

    scipy.sparse scipy.sparse的稀疏矩阵类型 scipy.sparse中的矩阵函数 构造函数 判别函数 其他有用函数 scipy.sparse中的作用在矩阵的内函数 针对元素的函数 ...

最新文章

  1. 不停歇的 Java 即将发布 JDK 16,新特性速览!
  2. Hibernate与数据库分表
  3. VS2008 JS脚本调试总是调试旧代码 真不知道怎么回事?谁能帮帮我呀!
  4. 解决:您需要来自xxx的权限才能对此文件夹进行更改(电脑系统取得管理员权限)
  5. 升级鸿蒙系统无法选择应用,申请鸿蒙系统有一个应用选择怎么选择呢
  6. 代码审计_md5()函数
  7. (原创)sqlite封装库SmartDB1.3发布
  8. JSTL-格式标签库
  9. Egret入门学习日记 --- 第十一篇(书中 4.1~4.6节 内容)
  10. CentOs 开启ssh服务
  11. 无线WIFI“信道”
  12. 上海大学生网络安全大赛 web write up
  13. win 如何生成ssh密钥
  14. 计算机网络>速率、带宽、吞吐量
  15. 不应该通过类实例来访问静态成员
  16. 支付宝信用贷豪掷38亿抢客,微粒贷不怂
  17. 系统错误null是什么意思_为什么NULL是错误的?
  18. 【读书笔记】清单革命
  19. Windows系统下批量重命名文件(超详细操作讲解)
  20. 题目98-3:围成一圈数三报数且出列——假设有10个人围成一圈,从1开始报数,数到3的人,让他出列,下一个人重新从1开始报数,数到3的人,让他出列……以此类推,把依次出列的9个人的编号打印出来

热门文章

  1. Oracle 实验五:Oracle中的SQL使用
  2. 中学数学教材教法试题
  3. 工作经验是积累总结出来的
  4. 使用setoolkit克隆钓鱼网站时修改网页错误的解决方法
  5. ZigBee无线温度传感网络设计
  6. 企业网络如何实现升级
  7. ATF(Arm Trusted Firmware)/TF-A Chapter 04 Authentication Framework
  8. RxSwift系列—RxSwift调度者
  9. 苹果新Apple TV出现Bug如何解决?
  10. Oracle Data Guard 简介