Hey,
given A = [1 1 3 4 5 6 6 7 7 7]. How could I return the sequence B =[1 2 1 1 1 1 2 1 2 3] such that each duplicate is counted and B is the same size as A?
I appreciate your help!

 채택된 답변

madhan ravi
madhan ravi 2020년 6월 17일

2 개 추천

ix = A(:) == unique(A);
B = nonzeros(cumsum(ix) .* ix)

댓글 수: 6

Dario Walter
Dario Walter 2020년 6월 17일
Really nice solution madhan. It works nicely for small arrays of A. Yet, A is a vector of 70000 entries in my case. Your approach results in an out of memory error :/
u = unique(A);
B = cell(1,numel(u));
for k = 1:numel(u)
ix = A == u(k);
B{k} = nonzeros(cumsum(ix) .* ix).';
end
B = [B{:}];
KSSV
KSSV 2020년 6월 18일
편집: KSSV 2020년 6월 18일
+1 I don't know this....(For the first answer)
Dario Walter
Dario Walter 2020년 6월 18일
편집: Dario Walter 2020년 6월 18일
Hey, thanks for your help so far. This approach only works for sorted data (which I am not allowed to do in my approach). Bad example I chose, sorry for that. What about B = [4 4 3 3 3 2 2 1 1 7 7 9 9] (each unique number only appears in a sequence in my problem, so that, for instance, C = [4 4 3 4] does not exist.
[B,I] = sort(A,'ascend') does neither help.
madhan ravi
madhan ravi 2020년 6월 18일
I knew you would come up with that question. That’s why you should experiment with 'stable' option in unique function.
Dario Walter
Dario Walter 2020년 6월 18일
Well done Madhan :). Thanks a lot!

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

도움말 센터File Exchange에서 Licensing on Cloud Platforms에 대해 자세히 알아보기

제품

릴리스

R2020a

태그

질문:

2020년 6월 17일

댓글:

2020년 6월 18일

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by