2012-03-01 5 views
0

D (k1, k2)라고하는 Nx2 행렬이 있습니다. 각 행의 k1과 k2를 비교하고 그에 따라 스위치를해야합니다. M 값을 갖는 다른 벡터 d (i)가있다. k1과 k2가 d (i) 중 하나의 값이면 전환해야합니다. D (k1,1) == d (i) & & D (k1,2) == d (i) .... if 루프의 모든 d (i) 요소를 비교할 수있는 방법이 있습니까? for 루프를 사용하지 않고? 특정 행에 반전 작업을 수행 할루프 내부의 MATLAB 루프

D_in_d = ismember(D,d); 

그리고 당신은 여전히 ​​루프가 : 벡터 d는 특정 값을 포함하는 경우

+0

그래서 올바르게 이해하면 : D 행렬에있는 두 행의 요소가 둘 다 벡터 d에 나타날 때 위치를 전환하려고합니다. –

답변

1

당신은 확인을 위해 ismember function을 사용할 수 있습니다

for i=1:size(D,1) 
    if all(D_in_d(i,:)) 
     D(i,:)=fliplr(D(i,:)); 
    end 
end 
0

이를 matlab의 vectorizion으로 루프를 전혀 사용하지 않고 비교적 쉽게 수행 할 수 있습니다.

퍼센트 (0, 그렇지 않으면 1 당신이 행을 교환해야하는 경우) 스왑 논리 벡터

swap_logical = (ismember(D(:,1),d) | ismember(D(:,2),d)); 

퍼센트 벡터화는 스왑 boolian에 따라 스와핑.

Dnew = swap_logical.*D(:,2:-1:1) + ~swap_logical.*D; 
+0

ismember는 이미 논리 출력을 제공하고 있으므로 간단하거나 진술을 권합니다 :'swap_logical = ismember (D (:, 1), d) | ismember (D (:, 2), d)' –

+0

나는 그것이 더 솔직하다는 것에 동의한다. –