matlab中稀疏矩阵的存储原理

lijing_08scut 2013-02-18 02:08:37
例如
A=[0 0 0 5
0 2 3 0
1 0 3 0
0 0 4 0];
B=sparse(A);

中,用whos命令查看B的存储空间的结果是92Bytes。根据书上的说法,是用3个矩阵来存储这个稀疏矩阵,也就是92=6*8+6*4+(4+1)*4=48+24+20;这三个矩阵分别为:
第一个矩阵用来存储所有的非零元素,该矩阵的长度为6,每个元素占8个字节;
第二个矩阵用来存储所有的非零元素的行指标,该矩阵的长度为6,每个元素占4个字节;
第三个矩阵用来存储每一列的开始处指针和一个标志着这3个矩阵结束的指针,该矩阵的长度为4+1,每个元素占4个字节;
注:如果用三元组的方法来存储,那需要的是4*6+4*6+8*6=24+24+48=96Bytes的存储空间了。
我想问的是,在这样的存储中,怎么根据下标直接得到相应的元素的值呢?(比如说我们要查找A[3][3]的值)
...全文
258 点赞 收藏 4
写回复
4 条回复
lijing_08scut 2013年02月21日
唉,算是我表达不清楚吧,你说的这个就是用三元组存储的方法,这个占用的空间是96B,而不是我看到的92B,不过还是谢谢你了
回复 点赞
cnmhx 2013年02月21日
稀疏矩阵元素都是由三元组保存。有三种三元组,它们之间可以互相转换。 最常用的三元组是:行,列,元素值。 例如,在上面的例子中: 1,2,2;1,3,3;2,1,1;2,3,3;3,3,4.
回复 点赞
cnmhx 2013年02月19日
原则上,对每对下标,在非零元素地址中查询,如果有,则读取相应值,否则,为0.
回复 点赞
lijing_08scut 2013年02月19日
能不能简单地举个例子?你说的这个我明白,能不能具体地描述一下?根据那三个矩阵,怎么查询到某一个元素的值呢?
回复 点赞
发动态
发帖子
其他开发语言
创建于2007-08-27

3058

社区成员

1.5w+

社区内容

其他开发语言 其他开发语言
社区公告
暂无公告