使用分类数组的优点
分类数据的自然表示
分类
是一种数据类型,用于存储具有来自有限离散类别集的值的数据。使用分类数组的一个常见替代方法是使用字符数组或字符向量的单元格数组。若要比较字符数组和字符向量的单元格数组中的值,必须使用比较字符串
这可能很麻烦。对于分类数组,您可以使用逻辑运算符情商
(= =
)以比较数值数组的方式比较元素。使用类别数组的另一种常用替代方法是在数值数组中使用整数存储类别数据。使用数字数组会丢失类别名称中所有有用的描述性信息,而且还倾向于认为整数值具有通常的数字含义,而对于类别数据则没有。
字符向量的数学排序
类别数组是用于存放具有有限离散类别集合中的值的非数值数据的方便且内存效率高的容器。当类别具有有意义的数学顺序时,例如包含来自离散类别集合的条目的数组时,它们特别有用{‘小’,‘中等’,‘大’}
在哪里小的<中的<大的
.
字符数组或字符向量的单元格数组不能使用字母顺序以外的排序。因此,不可能进行不平等比较,例如大于和小于。使用分类数组,您可以使用关系操作来测试是否相等,并执行具有有意义的数学顺序的元素比较。
减少内存需求
此示例演示如何比较将数据存储为字符向量单元格数组与分类数组所需的内存。类别数组具有定义为字符向量的类别,在字符向量或单元格数组中存储和操作这些类别的成本可能很高字符
数组中。类别数组只存储每个类别名称的一个副本,这通常减少了存储数组所需的内存量。
创建一个字符向量的样本单元格数组。
State = [repmat({“马”1); repmat({}, 25日“纽约”}, 25岁,1);...repmat ({“CA”}, 50岁,1);...repmat ({“马”1); repmat({}, 25日“纽约”}, 25岁,1)];
显示关于变量的信息状态
.
谁状态
名称大小字节类属性状态150x1 17400单元格
的变量状态
是字符向量的单元格数组,需要17,400字节的内存。
转换状态
到一个类别数组。
状态=绝对的(状态);
显示变量中的离散类别状态
.
类别(状态)
ans =3x1单元阵列{' ca '} {' ma '} {' ny '}
状态
包含150个元素,但只有三个不同的类别。
显示关于变量的信息状态
.
谁状态
名称大小字节类属性状态150x1 500类别
存储变量所需的内存大大减少。