假设我有单元格数组
Z = {'Pizza' 'Hamburger' 'Hamburger' 'Sushi' 'Bacon' 'Hamburger'}
我想计算某个单元格名称出现的时间, 所以输出应该是
Pizza = 1
Hamburger = 3
Sushi = 1
Bacon = 1
有没有办法用BASIC(或易于理解的)语法来做到这一点?我对此非常陌生,所以请解释一下你的答案,谢谢!
答案 0 :(得分:4)
您可以使用unique
和accumarray
来识别数组中的唯一字词并计算其出现次数,并使用fprintf
将结果打印到控制台。
例如:
Z = {'Pizza' 'Hamburger' 'Hamburger' 'Sushi' 'Bacon' 'Hamburger'};
% Get unique words & their indices in Z
[words, ~, wordidx] = unique(Z);
% Sum occurrences of indices to get count for each word
wordcounts = accumarray(wordidx, 1);
% Loop and print
for ii = 1:numel(words)
fprintf('%s = %u\n', words{ii}, wordcounts(ii))
end
打印哪些:
Bacon = 1
Hamburger = 3
Pizza = 1
Sushi = 1
请注意,unique
区分大小写,如果可能出现混合大小写,则应使用lower
等字符串对字符串数组进行规范化,以避免出现计数问题。
答案 1 :(得分:2)
您可以使用categorical
将单元格字符数组转换为一组有限的离散类别。之后,您可以使用histogram
来计算每个类别的出现频率:
Z = {'Pizza' 'Hamburger' 'Hamburger' 'Sushi' 'Bacon' 'Hamburger'};
Z_ = categorical(Z);
h = histogram(Z_);
h.Categories % the different categories
h.Values % the number of occurrence
备选方案1:histcounts
如果您对该情节不感兴趣,可以改用histcounts
。
[N,categories] = histcounts(Z_);
备选方案2:摘要
如果您只想将结果打印到屏幕上,可以使用summary
代替histogram
:
summary(Z_);