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

6 visualizzazioni (ultimi 30 giorni)
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 Commento
Jiri Hajek
Jiri Hajek il 17 Ott 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);

Accedi per commentare.

Risposta accettata

Stephen23
Stephen23 il 17 Ott 2022
Modificato: Stephen23 il 17 Ott 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

Più risposte (0)

Categorie

Scopri di più su Matrices and Arrays in Help Center e File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by