2010-07-15 4 views
2

나는 n 개의 행과 4 개의 열로 구성된 배열을 가지고있다. 행에있는 네 개의 항목 각각은 정수이며, 즉,각 행에 요소 순서가없는 행렬에서 고유 한 행을 어떻게 찾을 수 있습니까?

X = [ 
     111 112 432 2 
     6 9 115 111 
     112 432 111 2 

    ]; 

각 행은 정사면체의 꼭지점을 나타낸다. 이 꼭지점에는 방향성이 없습니다. 따라서 위의 경우 X (1, ​​:) 및 X (3, :)로 표시된 사면체는 같습니다.

X에서 중복 된 tetrahedra를 제거하고 싶지만 주문 독립성을 코드에 통합하는 방법을 알 수 없습니다.

은 내가 UNIQUE() 함수를 시도했지만이 고유 한 정수 (NX1) 배열, 즉, ​​

Y = UNIQUE(X); 

Y = [ 
    2 
    6 
    9 
    111 
    112 
    115 
    432 
    ] 

사람이 작업을 완료하는 데 상당히 효율적인 방법에 대한 어떤 제안이를 반환?

감사합니다,

답변

9

첫째, 정렬 사면체를위한 "표준"표현에 도착하기 행렬의 행 : 다음

X = sort(X, 2); 

옵션 'rows' 인수 unique를 사용 찾을 수있는 유일한 행 :

Y = unique(X, 'rows'); 
3

:-) S는 문서에서 인용 :

B = (A는, '행') A의 고유의 행을 반환 독특한

그게 니가 원하는거야?

1

먼저 행을 정렬 한 다음 HPM에서 제안하는대로 고유 한 (A, '행')을 사용해야합니다.

5

unique()은 행에서 작동하지만 행 1 와 3은 다른 순서입니다. 그래서 우리는 고유 한 것을 사용하기 전에 그들을 분류 할 수 있습니다.

Y=unique(sort(X,2),'rows') 

Y = 

    2 111 112 432 
    6  9 111 115 

당신은 인덱스를 반환 한 후 고유 한 원래의 순서를 유지하려면

[Y,yi]=unique(sort(X,2),'rows'); 

>> X(yi,:) 

ans = 

    112 432 111  2 
    6  9 115 111 
관련 문제