2013-07-15 2 views
0

매트릭스에서 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

는'distance'의'd'insteadead를 사용합니다. – collapsar

답변

5

정답은 : 당신이 제로 항목을 제거

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

첫째, 당신은 매트랩 행 당 최소를 계산하자.

항상 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