![](/img/trans.png)
[英]MATLAB How to fill individual entries of a sparse matrix using vectorised form?
[英]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.