2010-08-12 4 views
6

두 행렬 A와 B : 행렬 B의MATLAB에서 정렬하지 않고 A와 B의 교집합을 A에서 어떻게 삭제합니까?

A = [1 2 3 
    9 7 5 
    4 9 4 
    1 4 7] 

B = [1 2 3 
    1 4 7] 

모든 행은 내가 정렬하지 않고에서 공통의 행과 B를 삭제하려는 행렬 A의 구성원입니다.

나는 setdiff()를 시도했지만 출력을 정렬합니다.

내 특정 문제 (단백질 구조의 원자 좌표)에 대해 행의 정렬 된 무결성을 유지하는 것이 중요합니다.

답변

10

사용 ISMEMBER는 :

%# find rows in A that are also in B 
commonRows = ismember(A,B,'rows'); 

%# remove those rows 
A(commonRows,:) = []; 
+3

I LOVE'ismember'! 나는 사방에 그것을위한 용도를 찾는다! – JudoWill

1

나는 데이터를 정렬하지 않고 두 배열 사이 DIFF를 작성했다. matlab docs에서 위대한 옵션을 발견했습니다. 당신이 사용 달리 '분류' '안정적'또는 매개 변수없이 정렬 된 출력 데이터를 원하지 않는 경우 여기 Setdiff function

기능 [C,ia] = setdiff(___,setOrder) 의 정의입니다.

사용 사례입니다.

yDataSent = setdiff(ScopeDataY, yDataBefore, 'stable') 
yDataBefore = ScopeDataY; 
+0

간편한 솔루션을 이용해 주셔서 감사합니다. –