フィルターのクリア

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

1 回表示 (過去 30 日間)
FredMat
FredMat 2022 年 10 月 17 日
コメント済み: FredMat 2022 年 10 月 17 日
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 件のコメント
Jiri Hajek
Jiri Hajek 2022 年 10 月 17 日
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);

サインインしてコメントする。

採用された回答

Stephen23
Stephen23 2022 年 10 月 17 日
編集済み: Stephen23 2022 年 10 月 17 日
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
  1 件のコメント
FredMat
FredMat 2022 年 10 月 17 日
Thanks, method 2 works great. I cannot believe how simple the solution was.

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeMatrix Indexing についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by