2013-07-15 29 views
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 

任何幫助表示讚賞!謝謝!

+0

什麼樣的結果確實是你的代碼給你? – John

+0

它給了我一個零的陣列:( – happyme

+0

使用'd'而不是'距離'。 – collapsar

回答

5

正確的答案是:

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

首先你擺脫零個條目,然後你讓Matlab的計算每行的最低。

你應該總是試圖避免Matlab中的循環。

+1

非常感謝你!我會盡量避免在我的進一步程序循環! – happyme

+1

非常好,這個問題肯定會回答問題,不過@happyme是一個距離矩陣,你通常可能會對這個問題更感興趣:'d(logical(eye(size(d))))= Inf'這使您可以計算「其他」點的最小距離(對於您的示例矩陣,結果相同) –

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 
相關問題