我有一系列整数,比如arr = [1,5,2,2,5,1]
。
我需要一个结构,比如Counter
,它可以告诉我整数出现的次数。
我有以下代码但由于isfield
无法以这种方式使用,因此无效。
for i = 1 : length(arr)
if ~isfield(Counter, i)
Counter{i} = 0;
end
Counter{i} = Counter{i} + 1
end
那么有没有优雅的方法可以累积整数序列的出现次数?
答案 0 :(得分:3)
A = [1 2 1 2 3 3 1 4 5 5 6];
numbers = unique(A); % [1, 2, 3, 4, 5, 6] unique elements
count = histc(A, numbers); % [3, 2, 2, 1, 2, 1] occurrence of the element
答案 1 :(得分:2)
除了histc
之外还有两种可能性:
使用bsxfun
测试相等性,然后对每个数字的所有巧合求和:
A = [1 2 1 2 3 3 1 4 5 5 6];
count = sum(bsxfun(@eq, A(:), min(A):max(A)));
使用accumarray
对每个号码的每次出现加1
:
count = accumarray(A(:)-min(A)+1, 1, []).';
在这两种情况下,count(1)
是min(A)
的发生次数,count(2)
是min(A)+1
,...,count(end)
的发生次数是max(A)
的出现次数(其中一些可能为零)。