![](/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.