2011-09-01 161 views
2

how to count unique elements of a cell in matlab? 計數字母一個上面的代碼將計算字符數的,我喜歡這個在細胞「MATLAB」

[uniqueC,~,idx] = unique(characterCell); %# uniqueC are unique entries in c 
%# replace the tilde with 'dummy' if pre-R2008a 
counts = accumarray(idx(:),1,[],@sum); 

但broblem是細胞數:我的手機包含字母從A到E 。 我想找到'a's'的號碼...... 這段代碼不會說明有零'e如果它不可用。 簡單地將有4個計數,而不是5

 
1 
2 
2 
3 

,而不是

 
1 
2 
2 
3 
0 

如何添加

 
    a=1 
    b=2...... 
+0

好,我有一個= aaabaacaad可能的字符是A到E – pac

回答

4

可以使用ISMEMBER,而不是UNIQUE來解決這個問題:

characterCell = {'a' 'b' 'b' 'a' 'b' 'd' 'c' 'c'}; %# Sample cell array 
matchCell = {'a' 'b' 'c' 'd' 'e'};     %# Letters to count 

[~,index] = ismember(characterCell,matchCell); %# Find indices in matchCell 
counts = accumarray(index(:),1,[numel(matchCell) 1]); %# Accumulate indices 

,你應該得到的counts如下:

counts = 

    2 
    3 
    2 
    1 
    0 

編輯:

如果我正確理解您的評論,這聽起來像你想存儲或與他們的出現次數一起顯示的字母。要做到這一點的方法之一是使用NUM2CELL首先把counts成單元陣列一起將其收集到5×2單元陣列:

>> results = [matchCell(:) num2cell(counts)] 

results = 

    'a' [2] 
    'b' [3] 
    'c' [2] 
    'd' [1] 
    'e' [0] 

或者你可以創建一個字符數組轉換counts顯示它們使用字符串NUM2STR

>> results = strcat(char(matchCell(:)),':',num2str(counts)) 

results = 

a:2 
b:3 
c:2 
d:1 
e:0 
+0

感謝你的快速回復。 – pac

+0

但它不起作用[uniqueC,〜,idx] = ismember(Allquants {1},{'a','b','c','d','e'}); counts = accumarray(index(:),1,[5 1]) ???錯誤使用==> cell.ismember 輸出參數太多。 – pac

+1

@pac:看看我上面發佈的代碼。你不能換掉函數名,你必須改變輸出的處理方式。 – gnovice

2

調用UNIQUE功能時,您可以將所有可能的字符單元陣列,讓你得到每一個的至少一個發生,那麼我們只需減去從返回的所有罪名1ACCUMARRAY

例子:

characterCell = {'a' 'b' 'b' 'a' 'b' 'd' 'c' 'c'}; 

allPossibleChars = {'a' 'b' 'c' 'd' 'e'}; %# list of all possible characters 
c = [characterCell allPossibleChars];  %# make sure all chars are represented 
[uniqueC,~,idx] = unique(c); 
counts = accumarray(idx(:),1,[],@sum) - 1; %# subtract one from occurrences 

結果:

>> counts 
counts = 
    2 
    3 
    2 
    1 
    0 
+0

抱歉沒有得到您的觀點 – pac

+0

@pac:通過添加所有可能的字符(''到'e'),您確保它們都在您的數據中表示。然後我們使用相同的代碼來計算每次發生的次數。最後,我們必須從計數中減去1以說明我們最初添加的字符。 – Amro

+0

我想擴展函數,讓我們說單元也包含零。如果我使用1'0',在這種情況下,計數的答案將與附加行的零不變= 1相同。如何讓它忽略數字? – pac