繁体   English   中英

使用Matlab在线性时间内将矩阵放入稀疏形式

[英]Putting a matrix in to sparse form in linear time using matlab

我正在尝试以稀疏形式放置矩阵,到目前为止,我正在遍历行和列,检查每个元素以查看其是否为非零。 但是,这似乎是n ^ 2阶,其中n是矩阵中非零元素的数量。 有没有办法执行此命令n?

这是我的代码

function a = inputMatrix(X)




[m,n] = size(X);


k=1;
for i=1:m


   for j=1:n


       if X(i,j)~=0
           X(i,j);




           a(1,k) = struct('row',i,'column',j,'data',X(i,j));




           k = k+1;




       end




   end


end

这是我的时间测试

ri = zeros(250,250);
rj = zeros(250,250);
rk = zeros(100,100);








for i=1:10000
    ri(i) = randi([-10000,10000],1,1);
end
tic;
inputMatrix(ri);
time(1) = toc;




for i=1:5000
    rj(i) = randi([-10000,10000],1,1);
end


tic;
inputMatrix(rj);
time(2) = toc;








for i=1:1000
    rk(i) = randi([-10000,10000],1,1);
end


tic;
inputMatrix(rj);
time(3) = toc;

结果:

时间= 1.8009 0.5619 0.5545号 非零整数= 10000,5000,1000

结果表明存在非线性关系,而不是N阶

find为您提供非零元素的索引, sparse将矩阵直接转换为稀疏矩阵。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM