MATLAB学习 稀疏矩阵sparse matrix

定义: 含有大量0元素的矩阵

不是稀疏矩阵,则称满矩阵。full matrix

matlab对稀疏矩阵有专门的的运算命令,为了节省存储空间和运算时间。

  • 怎么节省存储空间?
    一个 m × n m\times n m×n的满矩阵,元素的数据类型是double,则总共需要 m × n × 8 m\times n\times 8 m×n×8个Bytes。

如果它满足稀疏特性,即大量元素为0,则可以存储为稀疏矩阵,只需要存储所有非零元素的值和位置(行号,列号),一般行号列号均占8个字节,所以每个非零元素需要用24个字节,那么如果有M个非零元素,则需要的存储空间是 24 × M 24\times M 24×M个Bytes。

非零元素越少,需要的内存越少。
在这里插入图片描述

a=eye(1000); % 单位阵
b=speye(1000); % 或sparse(a)
whos

b多了8个字节,我不知道是存了什么

 Name         Size                Bytes  Class     Attributes

  a         1000x1000            8000000  double              
  b         1000x1000              24008  double    sparse    
  • 怎么节省运算时间?
    计算时也只对非零元素操作,

在这里插入图片描述

s=sparse([1,2,3,4,5],[5,4,3,2,1],[12 23 34 45 53],6,7) % 6行7列的稀疏矩阵
a=full(s)
b=[1 0 0;3 0 4;0 0 3;0 5 0]
c=sparse(b)
d=rand(10,6)>0.96;  % 稀疏矩阵,这时是完全存储
d=sparse(d) % 存储为稀疏矩阵
whos d

注意稀疏矩阵的存储仍然是按完全存储的列存储的顺序来的,即第一列存完再存第2列····输出顺序和存储顺序一样
完全存储是把矩阵(不管几维)存成一条向量

s =
   (5,1)       53
   (4,2)       45
   (3,3)       34
   (2,4)       23
   (1,5)       12
a =
     0     0     0     0    12     0     0
     0     0     0    23     0     0     0
     0     0    34     0     0     0     0
     0    45     0     0     0     0     0
    53     0     0     0     0     0     0
     0     0     0     0     0     0     0
b =
     1     0     0
     3     0     4
     0     0     3
     0     5     0
c =
   (1,1)        1
   (2,1)        3
   (4,2)        5
   (2,3)        4
   (3,3)        3
d =
  10×6 稀疏 logical 数组
  (10,1)      1
   (2,2)      1
  Name       Size            Bytes  Class      Attributes

  d         10x6                74  logical    sparse   

查看稀疏矩阵中非零元素的信息:

d=rand(10,6)>0.94;  % 稀疏矩阵,这时是完全存储
d=sparse(d) % 存储为稀疏矩阵
n1=nnz(d) % number of non-zero elements
n2=nonzeros(d) %查看非零元素的值
n3=nzmax(d)  % 
spy(d) % 图形化显示非零元素的分布
n4=n1/prod(size(d)) % 查看稀疏程度(非零元素密度),prod(size(d))是矩阵总的元素数目
d =
  10×6 稀疏 logical 数组
   (4,1)      1
   (6,4)      1
   (8,5)      1
n1 =
     3
n2 =
  3×1 logical 数组
   1
   1
   1
n3 =
     3
n4 =
    0.0500
>> 

在这里插入图片描述

在这里插入图片描述

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值