2014-09-24 4 views
2

이의 내가 배열, array1을 가정 해 봅시다의 인덱스를 찾고, 다음과 같이대안 고유 값 (matlab에)

array1 = [1 2 2 2 3 3 4 4 4 5]; 

나는 첫째을 찾기 위해 노력하고있어이 배열의 고유 값 각각에 대한 인덱스 값입니다. 예상 출력 생산

[~,uniqueIndex,~] = unique(array1,'first') 

: 이것은 unique 기능을 수행하는 매우 쉬운

uniqueIndex = 
    1  2  5  7 10 

내가 매우 큰 배열의 수천이 작업과 unique 기능을 수행 할 필요 자체를 입증했다 내 코드에서 큰 병목 현상이 될 수 있습니다. 동일한 최종 결과 (즉, uniqueIndex 변수)를 달성하는 데 사용할 수있는 대안이 있는지 궁금하지만, 성능에 미치는 영향은 더 적습니다.

편집 : 배열은 정렬되고 정수만 포함합니다.

+1

문제의 배열에 대해 조금 아는 것이 도움이 될 수 있습니다. 그들은 정수를 포함하고 있습니까? 이미 정렬되어 있습니까? – MrAzzaman

+0

@ MrAzzaman 배열은 정수를 포함하며 이미 정렬되어 있습니다. – Alarik

답변

4

배열이 이미 정렬되어 있으므로 MATLAB unique 함수가 수행하는 검사 중 일부는 건너 뛸 수 있습니다. 이것은 적어도 약간의 코드를 빠르게한다

n = 1:numel(array1); 
d = [true,diff(array1)~=0]; 
uniqueIndex = n(d); 

다음 (마이너스 검사)로 MATLAB가 내부적으로 사용하는 방법이다.