0

我正在尝试编写代码以从“距离”矩阵中找到最小数字,不包括矩阵中的零。

distance=[0    0.44    0.40    0.63    0.89
0.44    0       0.44    0.72    1.00
0.40    0.44    0       0.28    0.56
0.63    0.72    0.28    0       0.28
0.89    1.00    0.56    0.28    0]

for  i=1:Nodes
    for  j=1:Nodes
        if (distance(i,j)~=0)

        [mini(i,:)]=[min(distance(i,:))];
        end
    end
end

任何帮助表示赞赏!谢谢!

4

2 回答 2

5

正确答案是:

d = distance;
d(~d) = inf;
mini = min(d);

首先你去掉零条目,然后让 Matlab 计算每行的最小值。

您应该始终尽量避免在 Matlab 中出现循环。

于 2013-07-15T22:21:20.733 回答
0

虽然我会推荐@ypnos 提供的矢量化解决方案,但这是使循环工作的一种方法。

mini = inf(1,Nodes)
for  i=1:Nodes
    for  j=1:Nodes
        if (distance(i,j)~=0) %Consider using if i~=j if you want the distance to 'other' points
            mini(j)=min(distance(i,j),mini(j));
        end
    end
end
于 2013-07-16T09:06:01.480 回答