我正在尝试编写代码以从'距离'矩阵中找到最小数字,不包括矩阵中的零。
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
任何帮助表示赞赏!谢谢!
答案 0 :(得分:5)
正确答案是:
d = distance;
d(~d) = inf;
mini = min(d);
首先摆脱零条目,然后让Matlab计算每行的最小值。
你应该总是试着在Matlab中避免循环。
答案 1 :(得分: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