本页对应的英文页面已更新,但尚未翻译。 若要查看最新内容,请点击此处访问英文页面。

有序分类数组

类别的顺序

categorical 是用于存储具有以下特征的数据的数据类型:其值来自离散分类有限集合,可以采用自然顺序。您可以指定并重新排列所有分类数组中的类别的顺序。但是,只有有序分类数组的类别可被视为具有数学排序。当需要使用 minmax 函数或需要进行关系运算(例如大于和小于)时,可以考虑使用有序分类数组。

宠物类别的离散集合 {'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 array
     medium      large  
     small       medium 
     large       small  

sizes 是一个包含三个类别的 3×2 有序分类数组,其中 small < medium < largevalueset 中的值的顺序即为 sizes 中的类别顺序。

基于整数创建有序分类数组

基于一个整数数组创建一个等效的分类数组。使用值 123 分别定义类别 smallmediumlarge

A2 = [2 3; 1 2; 3 1];
valueset = 1:3;
catnames = {'small','medium','large'};

sizes2 = categorical(A2,valueset,catnames,'Ordinal',true)
sizes2 = 3x2 categorical array
     medium      large  
     small       medium 
     large       small  

比较 sizessizes2

isequal(sizes,sizes2)
ans = logical
   1

sizessizes2 是等效的分类数组,具有相同的类别顺序。

将非有序分类数组转换为有序分类数组

基于字符向量元胞数组 A 创建一个非有序分类数组。

sizes3 = categorical(A)
sizes3 = 3x2 categorical array
     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 现在是一个与 sizessizes2 等效的 3×2 有序分类数组。

使用有序分类数组

要合并或比较两个有序分类数组,这两个输入数组的类别集合必须相同,其顺序也必须相同。此外,有序分类数组始终受保护。因此,在向有序分类数组指定新值时,这些值必须属于现有类别之一。有关详细信息,请参阅使用受保护的分类数组

另请参阅

| | |

相关示例

详细信息