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......
答案 0 :(得分:4)
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 x 2单元格数组中:
>> results = [matchCell(:) num2cell(counts)]
results =
'a' [2]
'b' [3]
'c' [2]
'd' [1]
'e' [0]
或者您可以创建一个字符数组,通过使用NUM2STR将counts
转换为字符串来显示它们:
>> 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