如何避免在此代码中循环

时间:2015-08-04 23:33:06

标签: algorithm matlab

我想知道是否有人可以提出另一种方法来编写避免循环的代码?谢谢!

for j=1:Ncol-1

    for i=nr:Nitr
        mydataD(k,1) = j;
        mydataD(k,2) = i;
        mydataD(k,3) = D(j,i); 
        k=k+1;
    end
    nr=nr+1;
end

[w,T] = kruskal(mydataD);

2 个答案:

答案 0 :(得分:1)

[r,c]=find(tril(D.',-1));
mydataD=[c,r,D(sub2ind(size(D),c,r))];

转置和交换的行/列是为了对行号进行排序。这不包括值为零的元素。如果你真的想要零值,我们将不得不改变第一行:

[r,c]=find(tril(ones(size(D),-1));
mydataD=[c,r,D(sub2ind(size(D),c,r))];

这使我成为稀疏矩阵的替代品,从邻接矩阵变为邻接列表。等效稀疏矩阵将是:

mydataD=sparse(triu(D,1));

答案 1 :(得分:0)

为避免循环,您可以执行以下操作:

    mydataD = zeros(Ncol -1, 3);
    i = linspace(1, Ncol -1, Ncol -1);
    j = linspace(nr,Niter, Ncol -1);
    mydataD(:,1) = i;
    mydataD(:,2) = j; 
    mydataD(:,3) = D(j,i);