2014-10-06 120 views
2

在單元陣列中的特定單詞假設我們有這樣的電池陣列:計數細胞與MATLAB

X = {'Good' 'Bad' 'Good'; 
    'Bad' 'Good' 'Bad'; 
    'Bad' 'Bad' 'Bad'; 
    'Good' 'Bad' 'Good'; 
    'Good' 'Good' 'Good'}; 

我怎麼能指望每一行中的GoodBad出現?

謝謝。

回答

3

假設你有這樣的輸入單元陣列,每行{'Good'}細胞計數快速溶液中的元素或每行的細胞的相等數目 -

count = sum(strcmp(X,{'Good'}),2) 

使用用於{'Bad'}相同的規則。


如果strcmp拖累你慢,你可以使用char用,而不是我個人最喜歡bsxfun

對於{'Good'} -

Xchar = char(X{:}) 
count = sum(reshape(all(bsxfun(@eq,Xchar(:,1:numel('Good')),'Good'),2),size(X)),2) 

對於{'Bad'} -

count = sum(reshape(all(bsxfun(@eq,Xchar(:,1:numel('Bad')),'Bad'),2),size(X)),2) 
+0

在一般情況下,你需要計算'N-1 '次,其中'n'是列表中唯一字的數量。在這個例子中,「Bad」的出現只是一行中元素的總數 - 「Good」的出現次數。 – Oleg 2014-10-06 18:14:55

+0

@OlegKomarov對於給定的輸入,這是正確的,但由於沒有提到這兩個詞是這裏唯一的詞,所以保持解決方案更通用一些是有意義的。欣賞那裏的觀察! – Divakar 2014-10-06 18:17:54

1

我假設你要計算整個字符串,而不是語言。

您可以使用unique來獲取唯一的字符串和整數標籤,每個標籤對應一個字符串。然後,您只需要統計每個標籤出現了多少次,可使用bsxfun(或histc)來完成:

[str, ~, lab] = unique(X); 
cnt = sum(bsxfun(@eq, lab(:), 1:max(lab))).'; %'// Or: cnt = histc(lab, 1:max(lab)) 

結果:

str = 
    'Bad' 
    'Good' 

cnt = 
    7 
    8