使用分类数组的好处
分类数据的自然表示形式
categorical
是用于存储具有以下特征的数据的数据类型:此类数据值来自离散分类有限集合。使用分类数组的一个常见替代方法是使用字符串数组。然而,虽然字符串数组存储文本,但无法用它们来定义类别。使用分类数组的另一种常见替代方法是将使用整数的分类数据存储在数值数组中。使用数值数组会丢失类别名称中的所有有用描述信息,还容易让人认为这些整数值只具有其常规的数值意义,而分类数据则不同。
类别的数学排序
分类数组是一种方便且节省内存的容器,适用于有限离散类别集合中的非数值数据。当类别按照有意义的数学方法排序时,分类数组会特别有用,例如对于一个由离散类别集合 ["small" "medium" "large"]
中的条目(其中 small < medium < large
)组成的数组,便是如此。
字符串数组提供的唯一排序方式是字母数字顺序。如果您使用分类数组,则可以为您的类别集指定任何有意义的排序。您可以使用关系运算来测试相等性,并执行具有有意义的数学排序的逐元素比较。
降低内存要求
此示例说明如何将以字符串数组形式存储数据所需的内存与以分类数组形式存储数据所需的内存进行比较。字符串数组必须存储每个元素,即使它们有许多重复值也是如此。分类数组只存储每个类别名称的一个副本,当数组有许多重复值时,这通常会减少存储数组所需的内存量。
创建一个示例字符串数组。
state = [repmat("MA",25,1);repmat("NY",25,1); ... repmat("CA",50,1); ... repmat("MA",25,1);repmat("NY",25,1)];
显示有关变量 state
的信息。
whos state
Name Size Bytes Class Attributes state 150x1 8212 string
将 state
转换为分类数组。
stateCats = categorical(state);
显示变量 stateCats
中的离散类别。
categories(stateCats)
ans = 3×1 cell
{'CA'}
{'MA'}
{'NY'}
stateCats
包含 150 个元素,但仅有三个不同类别。
显示关于这两个变量的信息。使用分类数组极大降低了存储该分类数组所需的内存。
whos state stateCats
Name Size Bytes Class Attributes state 150x1 8212 string stateCats 150x1 524 categorical