在MATLAB中用单元数组中的特定单词计数单元格

时间:2014-10-06 17:06:28

标签: string matlab cell-array

假设我们有这个单元格数组:

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

如何计算每行中GoodBad的出现次数?

感谢。

2 个答案:

答案 0 :(得分: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)

答案 1 :(得分: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