0

我有一个整数序列,比如说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

那么有没有什么优雅的方法可以累积整数序列的出现次数呢?

4

2 回答 2

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

两个核心命令是uniquehistc

于 2013-12-20T16:02:00.990 回答
2

除了histc

  1. 用于bsxfun检验是否相等,然后将每个数字的所有重合相加:

    A = [1 2 1 2 3 3 1 4 5 5 6];
    count = sum(bsxfun(@eq, A(:), min(A):max(A)));
    
  2. 用于对每个数字的每次出现accumarray求和:1

    count = accumarray(A(:)-min(A)+1, 1, []).';
    

在这两种情况下,count(1)是 的出现次数min(A)count(2)是 的出现次数min(A)+1,...,count(end)是出现的次数max(A)(其中一些可能为零)。

于 2013-12-20T16:28:08.313 回答