稀疏矩阵-sparse 存储和转换
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 存储和转换相关推荐
- python稀疏矩阵的存储与表示
参考链接: https://blog.csdn.net/bitcarmanlee/article/details/52668477 https://blog.csdn.net/wangjian1204 ...
- oracle number长度转换,Oracle Number型数值存储与转换的实现详解
Oracle在数据库内部通过相应的算法转换来进行数据存储,本文简单介绍Oracle的Number型数值存储及转换.这个内容是为了回答留言板上的2119号问题. 我们可以通过DUMP函数来转换数字的存储 ...
- c语言段页式存储地址转换,页式存储和段页式存储的地址转换过程
一.页式存储-地址转换 访问2次内存,第一次是页表,第二次是真正的物理内存. 二级页表,访问3次内存 两个例子的形式讲解逻辑地址到物理地址的转换: (1) 页系统页表 : 页号: 0 1 2 3 4 ...
- 稀疏矩阵的存储以及转置、加法、乘法操作实现
1.稀疏矩阵的存储与表示 只存储稀疏矩阵中极少数的非零元素,采用一个三元组<row,column,value>来唯一确定一个矩阵元素:因此,稀疏矩阵可用一个三元组数组来表示.另外,还需要存 ...
- 稀疏矩阵的存储方法(DOK、LIL、COO、CSR, CRS)
存储稀疏矩阵 经常用二维数组来存储矩阵. 用数组的ai,ja_{i,j}ai,j可以用索引值iii和jjj访问.通常,iii是 行索引,从上往下编号,jjj是列索引,从左到右进行编号.对于m×nm ...
- 一种比较省内存的稀疏矩阵Python存储方案
原文:http://www.pythontab.com/html/2014/pythonhexinbiancheng_0522/788.html 推荐系统中经常需要处理类似user_id, item_ ...
- 数据结构 - 十字链表之稀疏矩阵的存储
当数组中非零元素非常少时,我们可以称之为稀疏矩阵.为了减少空间的浪费,在存储稀疏矩阵的时候,我们对它进行压缩存储,即指存储非零信息. 一.数组的顺序存储 在存储稀疏矩阵的时候,除了存储非零元素的值,还 ...
- 稀疏矩阵CSR存储的C++实现
实现了稀疏矩阵的生成(指定稀疏程度).稀疏矩阵转换为CSR.从CSR中恢复出矩阵.稀疏矩阵和向量的乘法等功能.从运行结果来看,稀疏矩阵存储为CSR格式和向量相乘的运行速度快于普通矩阵向量乘法,而且稀疏 ...
- 数据存储单位转换,b、byte、KB、MB、GB、TB转换工具类
package com.sv.admin.commons.utils;import java.math.BigDecimal;/*** 存储单位换算** @author fv* @date 2022/ ...
- 数据结构——图的存储及转换
大一萌新,大佬轻喷^ _ ^ 有什么建议可以提出来一起学习OAO 文章目录 图的邻接矩阵存储 图的邻接表存储 网络的邻接矩阵存储 网络的邻接矩阵存储 邻接矩阵与邻接表的互相转换 邻接矩阵转换为邻接表 ...
最新文章
- python类直接调用不实例化_未实例化类的python调用方法
- 『ORACLE』 配置共享服务器(11g)
- 跨域问题汇总【已收录 CORS JSONP】
- Non-interger Area 分类讨论 奇偶 取模 牛客练习赛95
- 写好的python如何在其它电脑上运行_如何在另一个文件中运行一个python文件?
- 计算面平均边_计算机图形学补充2:齐次空间裁剪(Homogeneous Space Clipping)
- cv2.imread()返回none时应如何解决
- 基于安全压缩感知的大数据隐私保护
- 【XML】XML实例模板
- DSP定点与浮点计算
- idea进行maven离线打包时出现Cannot access central xxxxx in offline mode
- sql创建表主键gui_在SQL Server中使用主数据服务快速创建最终用户可以维护的GUI
- 数据库执行update语句,一直执行不完【已解决】
- 工作流:一文让你学会使用flowable工作流
- NOJ——[1480] 懒惰的风纪委Elaine
- 【电脑技术】修改无线网卡MAC地址失败的原因
- 上周回顾:DNS漏洞被泄 华为辞职门再起风波
- 激活 visio Premium 2010 vol 版本
- PHP孟加拉钢厂_昆钢推进孟加拉国、柬埔寨、缅甸钢铁国际产能合作示范园区建设...
- 记忆化搜索 (蒟蒻练习生)