我有一个整数序列,比如说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
那么有没有什么优雅的方法可以累积整数序列的出现次数呢?
我有一个整数序列,比如说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
那么有没有什么优雅的方法可以累积整数序列的出现次数呢?
除了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)
(其中一些可能为零)。