(转)

转自

http://www.cnblogs.com/xbinworld/p/4273506.html?utm_source=tuicool&utm_medium=referral

稀疏矩阵是指矩阵中的元素大部分是0的矩阵,事实上,实际问题中大规模矩阵基本上都是稀疏矩阵,很多稀疏度在90%甚至99%以上。因此我们需要有高效的稀疏矩阵存储格式。本文总结几种典型的格式:COO,CSR,DIA,ELL,HYB。

(1)Coordinate(COO)

这是最简单的一种格式,每一个元素需要用一个三元组来表示,分别是(行号,列号,数值),对应上图右边的一列。这种方式简单,但是记录单信息多(行列),每个三元组自己可以定位,因此空间不是最优。

(2)Compressed Sparse Row (CSR)

CSR是比较标准的一种,也需要三类数据来表达:数值,列号,以及行偏移。CSR不是三元组,而是整体的编码方式。数值和列号与COO一致,表示一个元素以及其列号,行偏移表示某一行的第一个元素在values里面的起始偏移位置。如上图中,第一行元素1是0偏移,第二行元素2是2偏移,第三行元素5是4偏移,第4行元素6是7偏移。在行偏移的最后补上矩阵总的元素个数,本例中是9。

CSC是和CSR相对应的一种方式,即按列压缩的意思。

以上图中矩阵为例:

Values:        [1 5 7 2 6 8 3 9 4]

Row Indices:[0 2 0 1 3 1 2 2 3]

Column Offsets:[0 2 5 7 9]

再来看一个CSR的例子[4]:

(3)ELLPACK (ELL)

用两个和原始矩阵相同行数的矩阵来存:第一个矩阵存的是列号,第二个矩阵存的是数值,行号就不存了,用自身所在的行来表示;这两个矩阵每一行都是从头开始放,如果没有元素了就用个标志比如*结束。上图中间矩阵有误,第三行应该是  0 2 3。

注:这样如果某一行很多元素,那么后面两个矩阵就会很胖,其他行结尾*很多,浪费。可以存成数组,比如上面两个矩阵就是:

0 1 * 1 2 * 0 2 3 * 1 3 *

1 7 * 2 8 * 5 3 9 * 6 4 *

但是这样要取一行就比较不方便了

(4)Diagonal (DIA)

对角线存储法,按对角线方式存,列代表对角线,行代表行。省略全零的对角线。(从左下往右上开始:第一个对角线是零忽略,第二个对角线是5,6,第三个对角线是零忽略,第四个对角线是1,2,3,4,第五个对角线是7,8,9,第六第七个对角线忽略)。[3]

这里行对应行,所以5和6是分别在第三行第四行的,前面补上无效元素*。如果对角线中间有0,存的时候也需要补0,所以如果原始矩阵就是一个对角性很好的矩阵那压缩率会非常高,比如下图,但是如果是随机的那效率会非常糟糕。

(5)Hybrid (HYB) ELL + COO

为了解决(3)ELL中提到的,如果某一行特别多,造成其他行的浪费,那么把这些多出来的元素(比如第三行的9,其他每一行最大都是2个元素)用COO单独存储。

选择稀疏矩阵存储格式的一些经验[2]:

  1. DIA和ELL格式在进行稀疏矩阵-矢量乘积(sparse matrix-vector products)时效率最高,所以它们是应用迭代法(如共轭梯度法)解稀疏线性系统最快的格式;
  2. COO和CSR格式比起DIA和ELL来,更加灵活,易于操作;
  3. ELL的优点是快速,而COO优点是灵活,二者结合后的HYB格式是一种不错的稀疏矩阵表示格式;
  4. 根据Nathan Bell的工作,CSR格式在存储稀疏矩阵时非零元素平均使用的字节数(Bytes per Nonzero Entry)最为稳定(float类型约为8.5,double类型约为12.5),而DIA格式存储数据的非零元素平均使用的字节数与矩阵类型有较大关系,适合于StructuredMesh结构的稀疏矩阵(float类型约为4.05,double类型约为8.10),对于Unstructured Mesh以及Random Matrix,DIA格式使用的字节数是CSR格式的十几倍;
  5. 从我使用过的一些线性代数计算库来说,COO格式常用于从文件中进行稀疏矩阵的读写,如matrix market即采用COO格式,而CSR格式常用于读入数据后进行稀疏矩阵计算。

一些特殊类型矩阵的存储效率(数值越小说明压缩率越高,即存储效率越高):

Structured Mesh

Unstructured Mesh

Random matrix

Power-Law Graph

格式适用性总结:

下面摘自[2]

6. Skyline Storage Format

The skyline storage format is important for the direct sparse solvers, and it is well suited for Cholesky or LU decomposition when no pivoting is required.

The skyline storage format accepted in Intel MKL can store only triangular matrix or triangular part of a matrix. This format is specified by two arrays:values andpointers. The following table describes these arrays:

values

A scalar array. For a lower triangular matrix it contains the set of elements from each row of the matrix starting from the first non-zero element to and including the diagonal element. For an upper triangular matrix it contains the set of elements from each column of the matrix starting with the first non-zero element down to and including the diagonal element. Encountered zero elements are included in the sets.

pointers

An integer array with dimension(m+1), where m is the number of rows for lower triangle (columns for the upper triangle).pointers(i) -pointers(1)+1gives the index of element invalues that is first non-zero element in row (column)i. The value ofpointers(m+1)is set tonnz+pointers(1), wherennz is the number of elements in the arrayvalues.

7. Block Compressed Sparse Row Format (BSR)

The Intel MKL block compressed sparse row (BSR) format for sparse matrices is specified by four arrays:values,columns,pointerB, andpointerE. The following table describes these arrays.

values

A real array that contains the elements of the non-zero blocks of a sparse matrix. The elements are stored block-by-block in row-major order. A non-zero block is the block that contains at least one non-zero element. All elements of non-zero blocks are stored, even if some of them is equal to zero. Within each non-zero block elements are stored in column-major order in the case of one-based indexing, and in row-major order in the case of the zero-based indexing.

columns

Element i of the integer array columns is the number of the column in the block matrix that contains thei-th non-zero block.

pointerB

Element j of this integer array gives the index of the element in thecolumns array that is first non-zero block in a rowj of the block matrix.

pointerE

Element j of this integer array gives the index of the element in thecolumns array that contains the last non-zero block in a rowj of the block matrix plus 1.

[1] Sparse Matrix Representations & Iterative Solvers, Lesson 1 by Nathan Bell.http://www.bu.edu/pasi/files/2011/01/NathanBell1-10-1000.pdf

[2] http://blog.csdn.net/anshan1984/article/details/8580952

[3] http://zhangjunhd.github.io/2014/09/29/sparse-matrix.html

[4] http://www.360doc.com/content/09/0204/17/96202_2458312.shtml

[5] Implementing Sparse Matrix-Vector Multiplication on Throughput-Oriented Processors, Nathan Bell and Michael Garland, Proceedings of Supercomputing ‘09

[6] Efficient Sparse Matrix-Vector Multiplication on CUDA, Nathan Bell and Michael Garland, NVIDIA Technical Report NVR-2008-004, December 2008

时间: 2024-10-14 00:32:16

(转)的相关文章

[转]《鸟人》

以下来自豆瓣影评 0. 饰演主角Riggan的,正是多年前饰演过<蝙蝠侠>和<蝙蝠侠归来>的Keaton 1. 电影的一大主题,就是演员们极度稀薄的安全感,以及对于接受和肯定的“瘾”.这些演员都有着不同形式的自我痴迷. Keaton不停地跟自己的阴暗面斗嘴,一方面要关心自己话剧的质量,担忧别人对自己作为艺术家的看法,一方面又愤怒地“唏嘘”当年老子多辉煌,你们这帮人算个毛!老子可以拍“Birdman 4”发大财!当明明已经开始做话剧了,好好表演完成任务却不够,他又特别容易被外界干扰到

【谜院群】2017年3月24日鸟人素素主擂谜会题

[谜院群]2017年3月24日鸟人素素主擂谜会题 1.三月踏青携友旅(2字著名鱼具品牌)千又2.花开映日,淡化听莺语(8笔字)英3.垄上幽篁皆破土(同义字二)龙.皇4.前庭柳垂杏花度(14笔字)嘛5.莫道桃源晚归处(7笔字)沐6.风光几回,半遮绿岗路(2字词汇)网络7.紫陌孤行鸟语稠(央视主持人)路一鸣8.斜阳西下月初露(2字词汇)斗胆9.前坡银桃早烂漫(5字常言)金木水火土10.伊人花容,回顾门中见(2字古文常用疑问词)问君11.余留心迹成绝恋(10笔字)途12.空怀旧日同思念(5笔字)司13

2014鸟人Birdman中文字幕文件下载

下载后,解压缩,会得到 Birdman.2014.1080p.WEB-DL.DD5.1.H264-RARBG.srt 文件,把这个文件放到视频文件(mkv文件)相同的文件夹里. 用暴风影音播放,如果没有显示中文字幕,需要用播放器的“选择字幕”的菜单选择这个srt文件(播放器里点击右键,选择字幕,找到srt文件即可). 点击下载:Birdman.2014.1080p.WEB-DL.DD5.1.H264-RARBG.zip

编程模拟自然(九):元胞自动机

序 旧书有云:发鸠之山,其上多柘木.有鸟焉,其状如乌,文首.白喙.赤足,名曰精卫,其鸣自詨. 一日,精卫游于码海,溺而不返,后常衔西山之木石,以堙于海.有诗为证: 万事有不平,尔何空自苦: 长将一寸身,衔木到终古? 我愿平码海,身沉心不改: 码海无平期,我心无绝时. 呜呼!君不见,西山衔木众鸟多,鹊来燕去自成窠! (前情提要:主角元乘坐返回舱降落到了码海上,随后遇到了个鸟人...) “咳咳,远道的客人,我名精卫XIV,乃是先祖精卫鸟的第十四代后裔...”鸟人作自我介绍 “...你是谁,从哪里来又

商代王后妇好、玉器及特展相关资料整理

1.展览的相关说明 展览: 玉鸣锵锵--商代王后妇好玉器特展 时间: 2016.12.27-2017.3.26 地点: 三楼书画厅 本展览为收费展览,全票30元,半票15元. 半票优惠人群: 教师.学生.军人(购票时出示相关证件:60岁以上老人(购票时出示身份证或老人证):1.2-1.4米儿童:20人以上团体. 免票范围: 1.2米以下小童(需在成人陪同下参观):博物馆同行.博物馆协会成员(检票时出示相关证件):残障人士(检票时出示相关证件). 2.展览分为五个部分 第一部分:"发现妇好&quo

新年最新的100句超牛的语言(转)

1.二农戏猪 2.干掉鸟人我就是天使! 3.帅有个屁用!到头来还不是被卒吃掉! 4.好好活着,因为我们会死很久!!! 5.有没有听过“大猪说有,小猪说没有”的故事? 6.女友问我她死了我会怎样我坚定的说:我不会独活(再找一个活)她大悦~! 7.人工智能和天然愚蠢无法相提并论——因为我们主张纯天然. 8.在教堂听讲经的时候我们应该保持肃静,打扰别人睡觉是很不礼貌的. 9.陪聊,提供夜间上门服务.(一个墓志铭) 10.人又不聪明,还学人家秃顶!! 11.你是电,李四光,你是唯一的神话… 12.笨人的

高中时候经常说的口头禅

1.靠!不服!2.不搞了不搞了!3.……我跟你说!4.我打死你!5.鸟人!6.无聊!7.干嘛!8.不可能!9.我拍死你!10.你滚啊!11.谁稀罕啊!12.……你头!13.打把鬼!14.谁说的!15.过来单挑!16.什!17.很多人都这么说!18.开玩笑!19.要定!20.是不是找打啊!21.叉!22.不是吧!23.考就考,有什么大不了!24.干!25.是啊是啊!26.怎么可能?27.羡慕吧!28.你再吵,吵什么吵!29.什么奇葩都有!30.操!31.一般般啦!32.随便!33.叫你……你又不听

绕过HR破门而入的求职智慧

以往我们在网上看到的很多求职文章或指导性纲领,譬如啥自信.做功课.良好形象.华丽的简历.工作经验.口才啥的,其实到了21世纪尤其是互联网高速发展的今天,前面这些技巧就显得无比空洞: 1.因为自信谁都可以做到哪怕装都能装出来 2.简历,谁都可以用各种模板来打造,至于说HR们是否看到华丽的简历就立刻对你打100分这也是有扯淡嫌疑的 3.良好形象.一般来说主要是衣着得体.气质不俗,长得好看不好看已经不怎么重要了,长得好看只能说明你大学时期课外生活也许很丰富,长得不好看也不代表你一定是个很努力的人 4.

【原创】win10下搭建vue开发环境+IIS部署

[原创]win10下搭建vue开发环境 如果要转发,请注明原作者和原产地,谢谢! 特别说明:下面任何命令都是在windows的命令行工具下进行输入,打开命令行工具的快捷方式如下图: 详细的安装步骤如下: 一.安装node.js 说明:安装node.js的windows版本后,会自动安装好node以及包管理工具npm,我们后续的安装将依赖npm工具. node.js的官方地址为:https://nodejs.org/en/download/,如下图所示: 根据自己电脑的具体配置,选择你要下载的安装

《设计你的人生》的部分经典语录

每个优秀的人,都有一段沉默的时光.在那一段时光,你付出了很多努力,忍受孤独和寂寞,不抱怨不诉苦,最后渡过了这段感动自己的日子. ——苏引华<设计你的人生>很多人在开始梦想时发现别人己经实现了自己要实现的梦想,于是就开始怀疑自己追不上了于是就放弃了梦想,最终成为了普通人!——苏引华<设计你的人生>很多人没有成功并不是他不能成功,而是他根本没有想过要成功或如何成功,生命当中有很多事情最初拥有的只是梦想,以及豪无根据的自信而己,但是,所有的一切,都从这里出发!——苏引华<设计你的人