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 秒。