Keep a tally of the number of occurences of a value in an array

10 views (last 30 days)
Hello,
I have an array with integers from 1 to n. I would like to create a second array with the occurence number of the value in the corresponding location (index) of the initial array. For instance, if I have a first array [2 3 1 2 1 4 3 2 4], I want to generate a second array [1 1 1 2 2 1 2 3 2].
I'd like to avoid a series of n conditional statements.
Thx!
  1 Comment
Jiri Hajek
Jiri Hajek on 17 Oct 2022
Hi, you don't need conditional statements, but a loop is probably necessary... You can use logical indexing:
LogicalIndexes = FirstArray == i;
SecondArray(LogicalIndexes) = nnz(LogicalIndexes);

Sign in to comment.

Accepted Answer

Stephen23
Stephen23 on 17 Oct 2022
Edited: Stephen23 on 17 Oct 2022
A = [2,3,1,2,1,4,3,2,4];
% method 1
F = @(n)nnz(A(1:n)==A(n));
B = arrayfun(F,1:numel(A))
B = 1×9
1 1 1 2 2 1 2 3 2
% method 2
B = sum(triu(A==A.'),1)
B = 1×9
1 1 1 2 2 1 2 3 2

More Answers (0)

Community Treasure Hunt

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

Start Hunting!