计算数组元素的出现次数

时间:2014-05-16 19:40:20

标签: arrays matlab

我有一个名为A的数组:

[8 2
6 1
6 1
6 1
1 2]

如何计算相同行的出现次数?它与unique不兼容,因为它不区分行。

3 个答案:

答案 0 :(得分:3)

sparse方法:

>> sparse(A(:,1), A(:,2), 1)
ans =
   (6,1)        3
   (1,2)        1
   (8,2)        1

如果你需要两个变量的形式,如Daniel's answer

[ii jj Occurrences] = find(sparse(A(:,1), A(:,2), 1));
Rows = [ii jj];

给出了

Rows =
     6     1
     1     2
     8     2

Occurrences =
     3
     1
     1

答案 1 :(得分:1)

使用unique获取索引。

[R,ixb,ix]=unique(A,'rows')

然后使用histc来计算

O=histc(ix,1:numel(ixb))

R包含(唯一)行,O包含出现次数。

答案 2 :(得分:0)

一个bsxfun + unique方法 -

binmat1 = squeeze(all(bsxfun(@eq,A,permute(A,[3 2 1])),2))
[~,ind1] = unique(bi2de(binmat1),'stable')
uniqueA = A(ind1,:)
counts = sum(binmat1(ind1,:),2)

因此,如果你有A as:

A=[ 8 2;
    6 1;
    6 1;
    6 1;
    1 2;
    63 1;
    63 1]

输出将是:

uniqueA =
     8     2
     6     1
     1     2
    63     1

counts =
     1
     3
     1
     2