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]的值)
...全文
457 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
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
  • 打赏
  • 举报
回复
能不能简单地举个例子?你说的这个我明白,能不能具体地描述一下?根据那三个矩阵,怎么查询到某一个元素的值呢?

3,424

社区成员

发帖
与我相关
我的任务
社区描述
其他开发语言 其他开发语言
社区管理员
  • 其他开发语言社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧