我想知道是否有人可以提出另一种方法来编写避免循环的代码?谢谢!
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);
答案 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);