簡體   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