Python 稀疏矩阵-sparse 存储和转换


Posted in Python onMay 27, 2017

稀疏矩阵-sparsep

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软件中数据的输入格式三元组:Python 稀疏矩阵-sparse 存储和转换

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

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

 感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

Python 相关文章推荐
python实现随机密码字典生成器示例
Apr 09 Python
Python使用django获取用户IP地址的方法
May 11 Python
python获取外网ip地址的方法总结
Jul 02 Python
使用python3实现操作串口详解
Jan 01 Python
selenium处理元素定位点击无效问题
Jun 12 Python
Puppeteer使用示例详解
Jun 20 Python
Python画图高斯分布的示例
Jul 10 Python
如何爬取通过ajax加载数据的网站
Aug 15 Python
Python 使用 Pillow 模块给图片添加文字水印的方法
Aug 30 Python
Python进程,多进程,获取进程id,给子进程传递参数操作示例
Oct 11 Python
浅谈Python类的单继承相关知识
May 12 Python
Python 第三方库 openpyxl 的安装过程
Dec 24 Python
Django基础之Model操作步骤(介绍)
May 27 #Python
python之PyMongo使用总结
May 26 #Python
Python3安装Pymongo详细步骤
May 26 #Python
Python计时相关操作详解【time,datetime】
May 26 #Python
Python表示矩阵的方法分析
May 26 #Python
Python实现中文数字转换为阿拉伯数字的方法示例
May 26 #Python
Python简单网络编程示例【客户端与服务端】
May 26 #Python
You might like
PHP数组实际占用内存大小原理解析
2020/12/11 PHP
Javascript Math对象
2009/08/13 Javascript
jQuery实现随意改变div任意属性的名称和值(部分原生js实现)
2013/05/28 Javascript
用JavaScript显示浏览器客户端信息的超相近教程
2015/06/18 Javascript
详细介绍jQuery.outerWidth() 函数具体用法
2015/07/20 Javascript
javascript实现label标签跳出循环操作
2016/03/06 Javascript
AngularJS入门(用ng-repeat指令实现循环输出
2016/05/05 Javascript
浅谈JavaScript 执行环境、作用域及垃圾回收
2016/05/31 Javascript
带有定位当前位置的百度地图前端web api实例代码
2016/06/21 Javascript
用Vue.js实现监听属性的变化
2016/11/17 Javascript
原生js实现移动端触摸轮播的示例代码
2017/12/22 Javascript
如何解决vue2.0下IE浏览器白屏问题
2018/09/13 Javascript
Vue源码解析之Template转化为AST的实现方法
2018/12/14 Javascript
通过cordova将vue项目打包为webapp的方法
2019/02/02 Javascript
uni-app之APP和小程序微信授权方法
2019/05/09 Javascript
解决vue刷新页面以后丢失store的数据问题
2020/08/11 Javascript
VUE项目实现主题切换的多种方法
2020/11/26 Vue.js
[49:29]LGD vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
Python批量修改文本文件内容的方法
2016/04/29 Python
Python实现统计文本文件字数的方法
2017/05/05 Python
Python中int()函数的用法浅析
2017/10/17 Python
Django实现分页功能
2018/07/02 Python
Python3实现腾讯云OCR识别
2018/11/27 Python
python跳出双层for循环的解决方法
2019/06/24 Python
Python实现的爬取豆瓣电影信息功能案例
2019/09/15 Python
python实现udp聊天窗口
2020/03/31 Python
pandas DataFrame 数据选取,修改,切片的实现
2020/04/24 Python
详解Python3.8+PyQt5+pyqt5-tools+Pycharm配置详细教程
2020/11/02 Python
HTML5之WebGL 3D概述(下)—借助类库开发及框架介绍
2013/01/31 HTML / CSS
美国知名艺术画网站:Art.com
2017/02/09 全球购物
安全生产中长期规划实施方案
2014/02/21 职场文书
毕业生求职自荐书范文
2014/03/27 职场文书
公司会议策划方案
2014/05/17 职场文书
2015年派出所民警工作总结
2015/04/24 职场文书
《爬天都峰》教学反思
2016/02/23 职场文书
JavaScript parseInt0.0000005打印5原理解析
2022/07/23 Javascript