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

来源:互联网 发布:夏玲电视直播软件 编辑:程序博客网 时间:2024/05/20 16:34

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);endtoc %先创建一个大稀疏矩阵S,然后在程序中用S(i,j)的方式给它赋值

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

阅读全文
0 0