2019独角兽企业重金招聘Python工程师标准>>>

稀疏矩阵-sparse¶

from scipy import sparse

稀疏矩阵的储存形式

在科学与工程领域中求解线性模型时经常出现许多大型的矩阵,这些矩阵中大部分的元素都为0,被称为稀疏矩阵。用NumPy的ndarray数组保存这样的矩阵,将很浪费内存,由于矩阵的稀疏特性,可以通过只保存非零元素的相关信息,从而节约内存的使用。此外,针对这种特殊结构的矩阵编写运算函数,也可以提高矩阵的运算速度。

scipy.sparse库中提供了多种表示稀疏矩阵的格式,每种格式都有不同的用处,其中dok_matrix和lil_matrix适合逐渐添加元素。

dok_matrix从dict继承,它采用字典保存矩阵中不为0的元素:字典的键是一个保存元素(行,列)信息的元组,其对应的值为矩阵中位于(行,列)中的元素值。显然字典格式的稀疏矩阵很适合单个元素的添加、删除和存取操作。通常用来逐渐添加非零元素,然后转换成其它支持快速运算的格式。

a = sparse.dok_matrix((10, 5))
a[2:5, 3] = 1.0, 2.0, 3.0
print a.keys()
print a.values()
[(2, 3), (3, 3), (4, 3)]
[1.0, 2.0, 3.0]

lil_matrix使用两个列表保存非零元素。data保存每行中的非零元素,rows保存非零元素所在的列。这种格式也很适合逐个添加元素,并且能快速获取行相关的数据。

b = sparse.lil_matrix((10, 5))
b[2, 3] = 1.0
b[3, 4] = 2.0
b[3, 2] = 3.0
print b.data
print b.rows
[[] [] [1.0] [3.0, 2.0] [] [] [] [] [] []]
[[] [] [3] [2, 4] [] [] [] [] [] []]

coo_matrix采用三个数组row、col和data保存非零元素的信息。这三个数组的长度相同,row保存元素的行,col保存元素的列,data保存元素的值。coo_matrix不支持元素的存取和增删,一旦创建之后,除了将之转换成其它格式的矩阵,几乎无法对其做任何操作和矩阵运算。

coo_matrix支持重复元素,即同一行列坐标可以出现多次,当转换为其它格式的矩阵时,将对同一行列坐标对应的多个值进行求和。在下面的例子中,(2, 3)对应两个值:1和10,将其转换为ndarray数组时这两个值加在一起,所以最终矩阵中(2, 3)坐标上的值为11。

许多稀疏矩阵的数据都是采用这种格式保存在文件中的,例如某个CSV文件中可能有这样三列:“用户ID,商品ID,评价值”。采用numpy.loadtxt或pandas.read_csv将数据读入之后,可以通过coo_matrix快速将其转换成稀疏矩阵:矩阵的每行对应一位用户,每列对应一件商品,而元素值为用户对商品的评价。

row = [2, 3, 3, 2]
col = [3, 4, 2, 3]
data = [1, 2, 3, 10]
c = sparse.coo_matrix((data, (row, col)), shape=(5, 6))
print c.col, c.row, c.data
print c.toarray()
[3 4 2 3] [2 3 3 2] [ 1  2  3 10]
[[ 0  0  0  0  0  0][ 0  0  0  0  0  0][ 0  0  0 11  0  0][ 0  0  3  0  2  0][ 0  0  0  0  0  0]]

个人操作中选择,coo_matrix 选在因为涉及稀疏矩阵运算,但是如果不用其他形式存储则复杂度太高(时间和空间)1000*1000的matrix大约话2h,也是要命了。无奈想到了Pajek软件中数据的输入格式三元组:

所以想到将自己的数据处理成类似的三元组!

即“matrix矩阵”—>"tuple三元组"—>"sparseMatrix2tuple"—>"scipy.sparse"

转载于:https://my.oschina.net/u/1462678/blog/908403

稀疏矩阵-sparse 存储和转换相关推荐

  1. python稀疏矩阵的存储与表示

    参考链接: https://blog.csdn.net/bitcarmanlee/article/details/52668477 https://blog.csdn.net/wangjian1204 ...

  2. oracle number长度转换,Oracle Number型数值存储与转换的实现详解

    Oracle在数据库内部通过相应的算法转换来进行数据存储,本文简单介绍Oracle的Number型数值存储及转换.这个内容是为了回答留言板上的2119号问题. 我们可以通过DUMP函数来转换数字的存储 ...

  3. c语言段页式存储地址转换,页式存储和段页式存储的地址转换过程

    一.页式存储-地址转换 访问2次内存,第一次是页表,第二次是真正的物理内存. 二级页表,访问3次内存 两个例子的形式讲解逻辑地址到物理地址的转换: (1) 页系统页表 : 页号: 0 1 2 3 4 ...

  4. 稀疏矩阵的存储以及转置、加法、乘法操作实现

    1.稀疏矩阵的存储与表示 只存储稀疏矩阵中极少数的非零元素,采用一个三元组<row,column,value>来唯一确定一个矩阵元素:因此,稀疏矩阵可用一个三元组数组来表示.另外,还需要存 ...

  5. 稀疏矩阵的存储方法(DOK、LIL、COO、CSR, CRS)

    存储稀疏矩阵 经常用二维数组来存储矩阵. 用数组的ai,ja_{i,j}ai,j​可以用索引值iii和jjj访问.通常,iii是 行索引,从上往下编号,jjj是列索引,从左到右进行编号.对于m×nm ...

  6. 一种比较省内存的稀疏矩阵Python存储方案

    原文:http://www.pythontab.com/html/2014/pythonhexinbiancheng_0522/788.html 推荐系统中经常需要处理类似user_id, item_ ...

  7. 数据结构 - 十字链表之稀疏矩阵的存储

    当数组中非零元素非常少时,我们可以称之为稀疏矩阵.为了减少空间的浪费,在存储稀疏矩阵的时候,我们对它进行压缩存储,即指存储非零信息. 一.数组的顺序存储 在存储稀疏矩阵的时候,除了存储非零元素的值,还 ...

  8. 稀疏矩阵CSR存储的C++实现

    实现了稀疏矩阵的生成(指定稀疏程度).稀疏矩阵转换为CSR.从CSR中恢复出矩阵.稀疏矩阵和向量的乘法等功能.从运行结果来看,稀疏矩阵存储为CSR格式和向量相乘的运行速度快于普通矩阵向量乘法,而且稀疏 ...

  9. 数据存储单位转换,b、byte、KB、MB、GB、TB转换工具类

    package com.sv.admin.commons.utils;import java.math.BigDecimal;/*** 存储单位换算** @author fv* @date 2022/ ...

  10. 数据结构——图的存储及转换

    大一萌新,大佬轻喷^ _ ^ 有什么建议可以提出来一起学习OAO 文章目录 图的邻接矩阵存储 图的邻接表存储 网络的邻接矩阵存储 网络的邻接矩阵存储 邻接矩阵与邻接表的互相转换 邻接矩阵转换为邻接表 ...

最新文章

  1. python类直接调用不实例化_未实例化类的python调用方法
  2. 『ORACLE』 配置共享服务器(11g)
  3. 跨域问题汇总【已收录 CORS JSONP】
  4. Non-interger Area 分类讨论 奇偶 取模 牛客练习赛95
  5. 写好的python如何在其它电脑上运行_如何在另一个文件中运行一个python文件?
  6. 计算面平均边_计算机图形学补充2:齐次空间裁剪(Homogeneous Space Clipping)
  7. cv2.imread()返回none时应如何解决
  8. 基于安全压缩感知的大数据隐私保护
  9. 【XML】XML实例模板
  10. DSP定点与浮点计算
  11. idea进行maven离线打包时出现Cannot access central xxxxx in offline mode
  12. sql创建表主键gui_在SQL Server中使用主数据服务快速创建最终用户可以维护的GUI
  13. 数据库执行update语句,一直执行不完【已解决】
  14. 工作流:一文让你学会使用flowable工作流
  15. NOJ——[1480] 懒惰的风纪委Elaine
  16. 【电脑技术】修改无线网卡MAC地址失败的原因
  17. 上周回顾:DNS漏洞被泄 华为辞职门再起风波
  18. 激活 visio Premium 2010 vol 版本
  19. PHP孟加拉钢厂_昆钢推进孟加拉国、柬埔寨、缅甸钢铁国际产能合作示范园区建设...
  20. 记忆化搜索 (蒟蒻练习生)

热门文章

  1. Qt5 程序启动画面图片效果
  2. 英语语法总结--动词的时态
  3. DATASNAP数据序列之FIREDAC的TFDJSONDataSets
  4. nginx配置中文域名解析
  5. freeswitch 用户配置详解_FreeSwitch配置和使用手册
  6. JNI 本地方法注册
  7. 这是一篇优雅的Springboot2.0使用手册 1
  8. HDU 6096 树套树
  9. eclipse安装M2Eclipse插件
  10. js jquery select 操作 获取值,选中选项,增加,修改,删除