2014-05-16 49 views
1

嗯,我有一個數組稱爲A計數次數

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

如何算同一排的發生?它不適用於unique,因爲它不區分行。

+0

你能得到所需輸出這個例子?很明顯,Divakar以不同於我的方式理解你的問題。 – Daniel

+0

@丹尼爾猜猜我錯了,所以不得不改變我的代碼。 – Divakar

+0

C = Daniel,你的代碼完美。 – MikiBelavista

回答

1

使用unique拿到指標。

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

然後使用histc算來

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

R含有的(唯一的)行和O出現的次數。

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=[ 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 
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