讲解视频:可以在bilibili搜索“MATLAB教程新手入门篇——数学建模清风主讲”。
MATLAB教程新手入门篇(数学建模清风主讲,适合零基础同学观看)_哔哩哔哩_bilibili
拓展:tabulate函数
tabulate函数可用来生成数据的频数表,它能帮助我们快速统计数据中各个元素的出现次数和百分比。下面我们引用MATLAB官网的帮助文档来介绍它的用法:
tabulate(x) 显示向量 x 中数据的频数表。对于 x 中的每个唯一值,tabulate 函数显示该值在 x 中的实例数和百分比。
当 x 为数值时,tbl = tabulate(x) 以数值矩阵形式返回频数表 tbl,否则以元胞数组形式返回它。
注意:如果向量 x 只包含正整数,则 tabulate 将为 1 和 max(x) 之间没有出现在 x 中的整数返回 0 个计数。
使用tabulate函数需要统计和机器学习工具箱Statistics and Machine Learning Toolbox,你可以在MATLAB的命令行窗口输入 ver 这个命令,它可以查看你已经安装的工具箱。
如果你没有安装对应的工具箱,可以卸载现有的MATLAB后重新安装一次。安装过程中,有一个环节是选择需要安装的产品(工具箱)。有些同学电脑硬盘空间有限,我这里提供了一个不需要安装的产品列表,大家可以在微信公众号《数学建模学习交流》中查看历史文章(发布时间是 2021 年 7 月 15 日)。下面我们来看tabulate函数的例子:
在上表最后一个例子中,向量 x3中的元素都是正整数,此时输出结果中的Value范围为1至x3的最大值5,由于数字1和3出现的次数为0,因此对应的Count和Percent都为0。如果你不希望在结果中看到频数为0的情况,你可以在调用 tabulate函数之前,将元素全为正整数的向量 x3 转换为字符串类型(下一节介绍)或者分类变量类型(后续章节介绍)。
现在考考大家,如果你的MATLAB没有安装统计和机器学习工具箱,你能通过其他方式来实现tabulate函数的功能吗?(假设你要计算的数据是字符向量元胞数组类型)
x = {'yes','no','yes','yes','and','no','or'};
% 使用unique函数找出x中的唯一值,同时获得每个元素在唯一值数组中的索引ind
[Value, ~, ind] = unique(x, 'stable'); % 加'stable'保持原文本出现的先后顺序
Count = sum(ind == 1:length(Value)); % 计算每个唯一值在x中出现的次数
Percent = Count/sum(Count)*100; % 计算每个唯一值出现的百分比
t = cell(length(Value),3); % 初始化一个元胞数组用于保存最终结果
% 将Value、Count和Percent的值分别填充到元胞数组t的相应位置
t(:,1) = Value; % 第一列保存唯一值(这里可以不对Value转置,大小兼容就行)
t(:,2) = num2cell(Count); % 第二列保存每个值的计数
t(:,3) = num2cell(Percent); % 第三列保存每个值的百分比
disp(t) % 输出结果t
% 大家可以对比tabulate函数和我们自己计算的结果是否相同
t2 = tabulate(x)