计算某个单元格名称在单元格数组中出现的时间[MATLAB]

时间:2017-10-09 22:36:41

标签: matlab

假设我有单元格数组

Z = {'Pizza' 'Hamburger' 'Hamburger' 'Sushi' 'Bacon' 'Hamburger'}

我想计算某个单元格名称出现的时间, 所以输出应该是

Pizza = 1
Hamburger = 3
Sushi = 1
Bacon = 1

有没有办法用BASIC(或易于理解的)语法来做到这一点?我对此非常陌生,所以请解释一下你的答案,谢谢!

2 个答案:

答案 0 :(得分:4)

您可以使用uniqueaccumarray来识别数组中的唯一字词并计算其出现次数,并使用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_);