有序分类数组
类别的顺序
categorical
是用于存储具有以下特征的数据的数据类型:其值来自离散分类有限集合,可以采用自然顺序。您可以指定并重新排列所有分类数组中的类别的顺序。但是,只有有序分类数组的类别可被视为具有数学排序。当需要使用 min
、max
函数或需要进行关系运算(例如大于和小于)时,可以考虑使用有序分类数组。
宠物类别的离散集合 {'dog' 'cat' 'bird'}
具有无意义的数学排序。您可以使用任意类别顺序,关联的数据的意义不会改变。例如,pets = categorical({'bird','cat','dog','dog','cat'})
创建一个分类数组,相应类别按字母顺序列出:{'bird' 'cat' 'dog'}
。您可以选择将类别的顺序指定或更改为 {'dog' 'cat' 'bird'}
,数据的意义不会改变。
有序分类数组包含的类别具有有意义的数学排序。例如,离散的大小类别集合 {'small', 'medium', 'large'}
采用数学排序 small < medium < large
。列出的第一个类别是最小的类别,最后一个类别是最大的类别。有序分类数组中类别的顺序会影响对有序分类数组进行关系比较的结果。
如何创建有序分类数组
此示例说明如何使用带 'Ordinal',true
名称-值对组参数的 categorical
函数创建有序分类数组。
基于字符向量元胞数组创建有序分类数组
基于字符向量元胞数组 A
创建一个有序分类数组 sizes
。使用 valueset
(指定为一个由唯一值构成的向量)定义 sizes
的类别。
A = {'medium' 'large';'small' 'medium'; 'large' 'small'}; valueset = {'small', 'medium', 'large'}; sizes = categorical(A,valueset,'Ordinal',true)
sizes = 3x2 categorical
medium large
small medium
large small
sizes
是一个包含三个类别的 3×2 有序分类数组,其中 small < medium < large
。valueset
中的值的顺序即为 sizes
中的类别顺序。
基于整数创建有序分类数组
基于一个整数数组创建一个等效的分类数组。使用值 1
、2
和 3
分别定义类别 small
、medium
和 large
。
A2 = [2 3; 1 2; 3 1]; valueset = 1:3; catnames = {'small','medium','large'}; sizes2 = categorical(A2,valueset,catnames,'Ordinal',true)
sizes2 = 3x2 categorical
medium large
small medium
large small
比较 sizes
和 sizes2
isequal(sizes,sizes2)
ans = logical
1
sizes
和 sizes2
是等效的分类数组,具有相同的类别顺序。
将非有序分类数组转换为有序分类数组
基于字符向量元胞数组 A
创建一个非有序分类数组。
sizes3 = categorical(A)
sizes3 = 3x2 categorical
medium large
small medium
large small
确定分类数组是否为有序。
isordinal(sizes3)
ans = logical
0
sizes3
是一个包含三个类别的非有序分类数组:{'large','medium','small'}
。sizes3
的类别是 A
的唯一值且经过排序。您必须使用输入参数 valueset
指定一个不同的类别顺序。
将 sizes3
转换为有序分类数组,其中 small < medium < large
。
sizes3 = categorical(sizes3,{'small','medium','large'},'Ordinal',true);
sizes3
现在是一个与 sizes
和 sizes2
等效的 3×2 有序分类数组。
使用有序分类数组
要合并或比较两个有序分类数组,这两个输入数组的类别集合必须相同,其顺序也必须相同。此外,有序分类数组始终受保护。因此,在向有序分类数组指定新值时,这些值必须属于现有类别之一。有关详细信息,请参阅使用受保护的分类数组。
另请参阅
categorical
| categories
| isordinal
| isequal