那些零元素数目远远多于非零元素数目,并且非零元素的分布没有规律的矩阵称为稀疏矩阵(sparse matrix)。
不同类型的矩阵有不同的压缩方式,比如对角矩阵只存储对角元素即可。要想充分压缩,就要找到数据的特点。
压缩算法也有很多种,如:音频压缩算法、视频压缩算法、通用压缩算法。不同压缩算法有不同的使用领域,一般专用领域的压缩算法效率高于通用压缩算法。因为专用领域压缩算法抓住了数据的特点。

本文主要介绍scipy提供的八种稀疏矩阵存储格式。

坐标存储 Coordinate Format (COO)

它使用三个数组进行存储:rows、columns、values,三个数组长度相等。分别表示数组元素的行、列、值。

Diagonal Storage Format (DIA)

对角线矩阵,它由两个数组进行存储:values是一个二维数组,distance是一个一维数组,distance[i]表示对角线相对主对角线的偏移量。values[i][j]表示第i行,相对主对角线偏离distance[j]的那条对角线上的数值。

Compressed Sparse Row Format (CSR)

压缩稀疏行矩阵,它由values、columns、rows三个数组组成。values是一个一维数组,columns是一个和values等长的一维数组,表示values中每个元素所在的列。rows是一个一维数组,rows[i]表示第i行元素在columns和values中的起始位置。rows数组的长度等于行数+1。

CSR的五种构造函数:

  • csr_matrix(D):由稠密矩阵D构造稀疏矩阵
  • csr_matrix(S):由稀疏矩阵S构造系数矩阵,相当于S.tocsr(),S是本文的其它类型的稀疏矩阵
  • csr_matrix((M, N), [dtype]):创建一个M行N列的空的稀疏矩阵
  • csr_matrix((data, (row_ind, col_ind)), [shape=(M, N)]):创建一个M行、N列的系数矩阵,稀疏矩阵的数据由三元组指定
  • csr_matrix((data, indices, indptr), [shape=(M, N)]):根据CSR最直接的参数初始化CSR

Compressed Sparse Column Format (CSC)

压缩稀疏列矩阵,和CSR一样,区别在于它按照列来存储。

Skyline Storage Format

三角矩阵压缩

Block Compressed Sparse Row Format (BSR)

块矩阵压缩

ELLPACK (ELL)

存储values和offset两个矩阵,values[i][j]元素在第i行的偏移用offset[i][j]来表示。

Hybrid (HYB)

混合压缩矩阵,融合了ELL和COO

参考资料

https://blog.csdn.net/pipisorry/article/details/41762945

csr_matrix具体用法

官网文档

scipy稀疏矩阵的更多相关文章

  1. Python数据分析----scipy稀疏矩阵

    一.sparse模块: python中scipy模块中,有一个模块叫sparse模块,就是专门为了解决稀疏矩阵而生.本文的大部分内容,其实就是基于sparse模块而来的 导入模块:from scipy ...

  2. SciPy笔记

    一.简介 SciPy 是一个开源的 Python 算法库和数学工具包.Scipy 是基于 Numpy 的科学计算库,用于数学.科学.工程学等领域,很多有一些高阶抽象和物理模型需要使用 Scipy.Sc ...

  3. Python机器学习入门

    # NumPy Python科学计算基础包 import numpy as np # 导入numpy库并起别名为npnumpy_array = np.array([[1,3,5],[2,4,6]])p ...

  4. Python Machine Learning: Scikit-Learn Tutorial

    这是一篇翻译的博客,原文链接在这里.这是我看的为数不多的介绍scikit-learn简介而全面的文章,特别适合入门.我这里把这篇文章翻译一下,英语好的同学可以直接看原文. 大部分喜欢用Python来学 ...

  5. Hands on Machine Learning with sklearn and TensorFlow —— 一个完整的机器学习项目(加州房地产)

    数据集地址:https://github.com/ageron/handson-ml/tree/master/datasets 先行知识准备:NumPy,Pandas,Matplotlib的模块使用 ...

  6. sklearn快速入门

    原创博文,转载请注明出处. (为了节约空间,打印结果常用"..."表示省略) 一.加载数据集 1. 加载sklearn自带的数据集 scikit-learn有一些自带的标准数据集, ...

  7. 4.2 Scikit-Learn简介(机器学习篇)

    目录 第四章 机器学习 4.1 机器学习简介 4.1.1 机器学习分类 4.2 Scikit-Learn简介 4.2.1 Scikit-Learn的数据表示 4.2.2 Scikit-Learn的评估 ...

  8. sklearn的train_test_split()各函数参数含义解释(非常全)

    sklearn之train_test_split()函数各参数含义(非常全) 在机器学习中,我们通常将原始数据按照比例分割为“测试集”和“训练集”,从 sklearn.model_selection ...

  9. Sklearn 速查

    ## 版权所有,转帖注明出处 章节 SciKit-Learn 加载数据集 SciKit-Learn 数据集基本信息 SciKit-Learn 使用matplotlib可视化数据 SciKit-Lear ...

随机推荐

  1. Android Migrate Android Code

    近期在更改程序架构的时候,用引用Library的方式实现程序的共享化过程中发现R.id.xx的文件不能够在  switch cases  中使用 看代码提示,如下信息: As of ADT 14, r ...

  2. 理解TensorFlow的Queue

    https://www.jianshu.com/p/d063804fb272 这篇文章来说说TensorFlow里与Queue有关的概念和用法. 其实概念只有三个: Queue是TF队列和缓存机制的实 ...

  3. angularJs中$controller的使用

    $controller的使用 参考:https://stackoverflow.com/questions/27866620/can-someone-provide-a-use-case-for-th ...

  4. apache 错误:The system cannot find the file specified.

    在启动apache时出现了以下错误信息 Window日志里也记录了此错误信息   而出现此错误的原因是IIS占用了80端口 停止IIS再重新启动apache即可解决   参考: cannot find ...

  5. Eclipse Maven项目报错3之找不到配置文件spring-servlet-context.xml

    一.具体错误如下图所示 根据文字提示可以看出是这个文件找不到,但是我去项目的这个目录找了,这个文件确实存在,那么是什么问题呢 二.解决问题 原因分析(来自网上) 代码编译的过程,是一个自动生成相应编译 ...

  6. python命令行参数传递JSON串

    有点小问题,一是传递的双引号被自动删除了,但是如果用单引号,JSON解析又不认. 所以,最后的方案是,传递单引号,但程序处理时做一个替换,替换成单引号.

  7. C++ 第十二课 其它标准C函数

    abort() 停止程序执行 assert() 当表达式非真,停止程序执行 atexit() 当程序退出执行设定的程序 bsearch() 执行折半查找 exit() 停止程序执行 getenv() ...

  8. SLF4J warning or error messages and their meanings

    来自:http://www.slf4j.org/codes.html#StaticLoggerBinder The method o.a.commons.logging.impl.SLF4FLogFa ...

  9. Java并发容器之阻塞队列BlockingQueue

    BlockingQueue提供了线程安全的队列访问方式:当阻塞队列进行插入数据时,如果队列已满,线程将会阻塞等待直到队列非满:从阻塞队列取数据时,如果队列已空,线程将会阻塞等待直到队列非空. Bloc ...

  10. openerp学习笔记 视图继承(tree、form、search)

    支持的视图类型:form.tree.search ... 支持的定位方法:                  <notebook position="inside"> ...