2016-10-27 2 views
2

예를 들어, 정렬 된 벡터는 [9 9 9 10 13 13 14 15] 이고 각 요소에 순서를 부여하고 동일한 요소를 유지하려고합니다. 즉 답변을 원합니다. [1 1 1 2 3 3 5 5]벡터의 각 요소를 어떻게 나타낼 것인가?

아이디어가 있으십니까? 감사합니다.

참고 : 내 진짜 벡터 (약 50,000 요소) 훨씬 큰 그래서 수동으로 할 수 없습니다 ...

답변

6

입력의 정렬 특성을 사용하여

cumsum([logical(1) diff(a)~=0]) 

런타임 - 데이터는 여기에 cumsum와 접근 방법과 diff입니다 테스트 -

>> a = sort(randi([10,10000],[1,10000000]));% Input array 
>> tic,[~,~,idx] = unique(a);toc % @rahnema1's soln with unique 
Elapsed time is 0.883363 seconds. 
>> tic,cumsum([logical(1) diff(a)~=0]);toc 
Elapsed time is 0.074566 seconds. 
+0

효과가있었습니다. 감사! – user135172

+0

'logical (1)'은'true'보다 빠릅니다. –

+0

@LuisMendo MATLAB에서 부울 형 '1'을 얻는 방법을 잊어 버렸기 때문에 부끄러운 순간이었습니다. Numpy에서 우리는'True'를 가지고 있으며, 여기서 작동하지 않습니다. 그래서 나는 단지'논리적'으로갔습니다. 결국 나는 그것을 알아 냈지만 그 작은 것을 편집하고 싶지 않았습니다. NumPy의 너무 많은 부분이 도움이되지 않습니다.) – Divakar

3

사용할 수 unique 기능

a=[9 9 9 10 13 13 14 15 ] 
[~,~,idx] = unique(a) 
관련 문제