我有一个整数序列,比如说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)(其中一些可能为零)。