我有一个名为A
的数组:
[8 2
6 1
6 1
6 1
1 2]
如何计算相同行的出现次数?它与unique
不兼容,因为它不区分行。
答案 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