Increase counter for each element in array

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!

 采纳的回答

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

6 个评论

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{:}];
+1 I don't know this....(For the first answer)
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.
I knew you would come up with that question. That’s why you should experiment with 'stable' option in unique function.
Well done Madhan :). Thanks a lot!

请先登录,再进行评论。

更多回答(0 个)

类别

帮助中心File Exchange 中查找有关 Licensing on Cloud Platforms 的更多信息

产品

版本

R2020a

标签

Community Treasure Hunt

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

Start Hunting!

Translated by