- Matlab 教程
- MATLAB - 首页
- MATLAB - 概述
- MATLAB - 功能
- MATLAB - 环境设置
- MATLAB - 编辑器
- MATLAB - 在线版
- MATLAB - 工作区
- MATLAB - 语法
- MATLAB - 变量
- MATLAB - 命令
- MATLAB - 数据类型
- MATLAB - 运算符
- MATLAB - 日期和时间
- MATLAB - 数字
- MATLAB - 随机数
- MATLAB - 字符串和字符
- MATLAB - 文本格式化
- MATLAB - 时间表
- MATLAB - M 文件
- MATLAB - 冒号表示法
- MATLAB - 数据导入
- MATLAB - 数据导出
- MATLAB - 数据归一化
- MATLAB - 预定义变量
- MATLAB - 决策
- MATLAB - 决策语句
- MATLAB - if 语句
- MATLAB - if else 语句
- MATLAB - if…elseif else 语句
- MATLAB - 嵌套 if 语句
- MATLAB - switch 语句
- MATLAB - 嵌套 switch
- MATLAB - 循环
- MATLAB - 循环
- MATLAB - for 循环
- MATLAB - while 循环
- MATLAB - 嵌套循环
- MATLAB - break 语句
- MATLAB - continue 语句
- MATLAB - end 语句
- MATLAB - 数组
- MATLAB - 数组
- MATLAB - 向量
- MATLAB - 转置运算符
- MATLAB - 数组索引
- MATLAB - 多维数组
- MATLAB - 兼容数组
- MATLAB - 分类数组
- MATLAB - 元胞数组
- MATLAB - 矩阵
- MATLAB - 稀疏矩阵
- MATLAB - 表格
- MATLAB - 结构体
- MATLAB - 数组乘法
- MATLAB - 数组除法
- MATLAB - 数组函数
- MATLAB - 函数
- MATLAB - 函数
- MATLAB - 函数参数
- MATLAB - 匿名函数
- MATLAB - 嵌套函数
- MATLAB - 返回语句
- MATLAB - 无返回值函数
- MATLAB - 局部函数
- MATLAB - 全局变量
- MATLAB - 函数句柄
- MATLAB - 滤波器函数
- MATLAB - 阶乘
- MATLAB - 私有函数
- MATLAB - 子函数
- MATLAB - 递归函数
- MATLAB - 函数优先级顺序
- MATLAB - map 函数
- MATLAB - mean 函数
- MATLAB - end 函数
- MATLAB - 错误处理
- MATLAB - 错误处理
- MATLAB - try…catch 语句
- MATLAB - 调试
- MATLAB - 绘图
- MATLAB - 绘图
- MATLAB - 绘制数组
- MATLAB - 绘制向量
- MATLAB - 条形图
- MATLAB - 直方图
- MATLAB - 图形
- MATLAB - 二维线图
- MATLAB - 三维图
- MATLAB - 图表格式化
- MATLAB - 对数坐标轴图
- MATLAB - 绘制误差条
- MATLAB - 绘制三维等值线图
- MATLAB - 极坐标图
- MATLAB - 散点图
- MATLAB - 绘制表达式或函数
- MATLAB - 绘制矩形
- MATLAB - 绘制频谱图
- MATLAB - 绘制网格曲面
- MATLAB - 绘制正弦波
- MATLAB - 插值
- MATLAB - 插值
- MATLAB - 线性插值
- MATLAB - 二维数组插值
- MATLAB - 三维数组插值
- MATLAB - 多项式
- MATLAB - 多项式
- MATLAB - 多项式加法
- MATLAB - 多项式乘法
- MATLAB - 多项式除法
- MATLAB - 多项式的导数
- MATLAB - 变换
- MATLAB - 变换函数
- MATLAB - 拉普拉斯变换
- MATLAB - 拉普拉斯滤波器
- MATLAB - 高斯-拉普拉斯滤波器
- MATLAB - 逆傅里叶变换
- MATLAB - 傅里叶变换
- MATLAB - 快速傅里叶变换
- MATLAB - 二维逆余弦变换
- MATLAB - 向坐标轴添加图例
- MATLAB - 面向对象
- MATLAB - 面向对象编程
- MATLAB - 类和对象
- MATLAB - 函数重载
- MATLAB - 运算符重载
- MATLAB - 用户自定义类
- MATLAB - 复制对象
- MATLAB - 代数
- MATLAB - 线性代数
- MATLAB - 高斯消元法
- MATLAB - 高斯-约旦消元法
- MATLAB - 简化行阶梯形式
- MATLAB - 特征值和特征向量
- MATLAB - 积分
- MATLAB - 积分
- MATLAB - 二重积分
- MATLAB - 梯形法则
- MATLAB - 辛普森法则
- MATLAB - 其他
- MATLAB - 微积分
- MATLAB - 微分
- MATLAB - 矩阵的逆
- MATLAB - GNU Octave
- MATLAB - Simulink
- MATLAB - 有用资源
- MATLAB - 快速指南
- MATLAB - 有用资源
- MATLAB - 讨论
MATLAB - 分类数组
分类数组是 MATLAB 中的一种数据类型,允许处理离散数据。离散数据是指由不同的、独立的值或类别组成的数据类型。离散数据只能取特定的、有限的值,通常是整数或不同的类别。
分类数组提供了一种有效存储和用户友好的非数值数据处理方法,并有助于保留数据值的描述性标签。
以下是使用分类数组的一些优点。
- 与元胞数组或常规字符串数组相比,分类数组更有效地使用内存。这在处理大型数据集时尤其有利。
- 分类数组能够更快地进行数据操作和分析。许多函数和运算都针对分类数组进行了优化,与处理字符串相比,这提高了性能。
- 分类数组使管理和维护数据中一致的类别变得容易。
- 使用分类数组创建的可视化通常具有更清晰的标签和图例,从而更容易传达数据中的见解。
此外,使用分类数组还有一些缺点:
- 分类数组最适合管理离散数据。如果您的数据包含连续或数值数据,则使用分类数组可能不是最佳选择,因为它们主要设计用于非数值的分类信息。
- 很难对分类数组执行复杂的运算。
创建分类数组
可以使用以下方法在 MATLAB 中创建分类数组:
- categorical() 函数
- discretize() 函数
使用 categorical() 函数
可以使用 categorical() 函数将字符串或数字数组转换为分类数组。
语法
C = categorical(A)
这里 C 是从给定数组 A 创建的分类数组。
示例 1
在这个例子中,我们将使用元胞数组数据,其详细信息如下所示。
data = {'Red', 'Blue', 'Green', 'Red', 'Green'}; primary_colors = categorical(data)
使用 categorical() 函数将元胞数组转换为分类数组。
在 MATLAB 命令窗口中执行时,输出为:
>> data = {'Red', 'Blue', 'Green', 'Red', 'Green'}; primary_colors = categorical(data) primary_colors = 1x5 categorical array Red Blue Green Red Green >>
如果您想从 primary_colors 中了解类别,您可以使用 categories() 方法,该方法有助于从给定的分类数组中获取唯一类别。
categories(primary_colors)
此方法将给出分类数组 primary_colors 中存在的不同类别。
在 MATLAB 命令窗口中执行相同的操作时,输出如下:
>> categories(primary_colors) ans = 3x1 cell array {'Blue' } {'Green'} {'Red' } >>
示例 2
在这个例子中,我们将首先创建一个数值数组,然后为整数值分配类别。
A = [1 3 2; 2 1 3; 3 1 2] C = categorical(A,[1 2 3],{'AA' 'BB' 'CC'})
在上面的例子中,A 是一个 3 行 3 列的矩阵。此矩阵的每个元素都是一个整数。
现在,代码 C = categorical(A,[1 2 3],{'AA' 'BB' 'CC'}) 使用指定的类别将数值数组 A 转换为分类数组 C。
- A 是您要转换的数组。
- [1 2 3] 指定数组 A 中存在的不同整数值。
- {'AA' 'BB' 'CC'} 提供要分配给整数值 1、2 和 3 的相应类别。
分类数组 C 的每个元素都对应于原始数组 A 的元素,它将整数值映射到其相应的类别。例如:
- A 中的整数 1 映射到 C 中的 'CC'。
- A 中的整数 2 映射到 C 中的 'BB'。
- A 中的整数 3 映射到 C 中的 'AA'。
在 Matlab 中执行后,输出为:
>> A = [1 3 2; 2 1 3; 3 1 2] C = categorical(A,[1 2 3],{'AA' 'BB' 'CC'}) A = 1 3 2 2 1 3 3 1 2 C = 3x3 categorical array AA CC BB BB AA CC CC AA BB >>
示例 3
在这个例子中,我们将创建一个有序分类数组。
有序分类数组遵循现有类别中的自然顺序或层次结构。
A = [3 2;3 3;3 2;2 1;3 2] valueset = [1:3]; categorynames = {'poor' 'fair' 'good'}; B = categorical(A,valueset,categorynames ,'Ordinal',true)
矩阵 A 是一个 5x2 矩阵,包含整数值。此矩阵有 5 行 2 列,每个元素都是一个整数。
valueset 是一个向量 [1, 2, 3],它定义了矩阵 A 中可能存在的整数值。这表示有序类别的级别。
categorynames 是一个元胞数组 {'poor', 'fair', 'good'},它将相应的类别名称分配给 valueset 中的值。类别名称的顺序对应于 valueset 中值的顺序。
The code : B = categorical(A, valueset, categorynames, 'Ordinal', true);
将数值数组 A 转换为使用指定的 valueset 和 categorynames 的有序分类数组 B。
- A 是要转换的数值数组。
- valueset 定义数组中存在的不同整数值。
- categorynames 为整数值提供相应的类别名称。
- 'Ordinal', true 指定分类数组 B 应被视为有序,这意味着类别的顺序很重要。
执行后,输出如下:
>> A = [3 2;3 3;3 2;2 1;3 2] valueset = [1:3]; categorynames = {'poor' 'fair' 'good'}; B = categorical(A,valueset,categorynames ,'Ordinal',true) A = 3 2 3 3 3 2 2 1 3 2 B = 5x2 categorical array good fair good good good fair fair poor good fair >>
使用 discretize() 函数
创建类别类型数据的另一种方法是在 Matlab 中使用 discretize() 函数。
此函数采用数值数组,并根据指定的边缘或所需的箱数将其划分为离散类别或箱。
语法
Y = discretize(X,edges)
这里
X - 您想要离散化的输入数据。
edges - 您想要将数据分类到的箱或区间的边缘。
示例
scores = [68, 75, 82, 90, 55, 78, 92, 60, 88, 72]; edges = [0, 60, 80, 100]; categories = discretize(scores, edges)
在这个例子中,edges 数组定义了对分数进行分类的区间。低于 60 的分数将被归类为“低”,60 到 80 之间的分数将被归类为“中”,80 到 100 之间的分数将被归类为“高”。
执行后,输出如下:
>> scores = [68, 75, 82, 90, 55, 78, 92, 60, 88, 72]; edges = [0, 60, 80, 100]; categories = discretize(scores, edges) categories = 2 2 3 3 1 2 3 2 3 2