稀疏矩阵在节省空间和提高计算速度方面的作用

3 篇文章 0 订阅
1 篇文章 0 订阅

Sparse函数可以用来产生稀疏矩阵。语句S=sparse(i,j,s,m,n)能够利用向量i,j,s来产生mxn的稀疏矩阵S,具体的产生方法为S(i(k),j(k))==s(k)。其中i,j是S中不为0的元素的行索引和列索引。因此只能是正整数。此外,S=sparse(A)可以将矩阵A转化成稀疏矩阵形式S。
以下为代码

i=1:1000;
j=randperm(1000); %随机排列1~1000的所有整数
s=rand(1,1000); %生成1*1000的服从(0,1)连续均匀分布的向量
S=sparse(i,j,s);
FS=full(S); %S矩阵的非稀疏格式        

空间对比

whos
 Name         Size                Bytes  Class     Attributes

  FS        1000x1000            8000000  double              
  S         1000x1000              24008  double    sparse    
  ans          1x1                     8  double              
  i            1x1000               8000  double              
  j            1x1000               8000  double              
  s            1x1000               8000  double      

时间对比

>>tic;S2=S*S;toc

时间已过 0.059243 秒。

>> tic;FS2=FS*FS;toc

时间已过 0.655330 秒。

应当在准备好数据后用sparse函数生成稀疏矩阵,而不是先创建一个大型稀疏矩阵然后用S(i,j)来赋值,后者效率很低
对比代码

clear;
i=1:1000;  %行序号
j=randperm(1000); %随机排列的列序号
n=rand(1,1000); %对应位置的元素值
tic;S1=sparse(i,j,n,1000,1000);toc  %用sparse函数生成稀疏矩阵时间
tic;
S2=spalloc(1000,1000,1000);
for k=1:1000
    S2(i(k),j(k))=n(k);
end
toc %先创建一个大稀疏矩阵S,然后在程序中用S(i,j)的方式给它赋值

时间已过 0.023900 秒。
时间已过 0.090753 秒。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值