计算单元格中的字母“matlab”

时间:2011-09-01 20:47:16

标签: matlab

how to count unique elements of a cell in matlab? 上面的代码将计算我喜欢的单元格中的字符数

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

但问题是:我的单元格包含从a到e的字母。 我想找不到'a'的'b'...... 这段代码不会说明例如零'如果不可用的话。 只需要4个计数而不是5个

1
2
2
3

而不是

1
2
2
3
0

如何添加

     a=1
     b=2......

2 个答案:

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

修改

如果我理解你的评论,听起来你想要存储或显示字母及其出现次数。一种方法是首先使用NUM2CELLcounts转换为单元格数组,将它们一起收集到5 x 2单元格数组中:

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

results = 

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

或者您可以创建一个字符数组,通过使用NUM2STRcounts转换为字符串来显示它们:

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

results =

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

答案 1 :(得分:2)

您可以在调用UNIQUE函数时将所有可能的字符附加到单元格数组,以便每个函数至少出现一次,然后我们只需从{{返回的所有计数中减去1 1}}。

示例:

ACCUMARRAY

结果:

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