主要内容

本页翻译不是最新的。点击此处可查看最新英文版本。

有序分类数组

类别的顺序

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 名称-值参量的 categorical 函数创建有序分类数组。

基于字符串数组的有序分类数组

创建一个有序分类数组。要使数组有序,请将 Ordinal 名称-值参量设置为 true

A = ["medium" "large";"small" "medium"; "large" "small"];
valueset = ["small" "medium" "large"];

sizes = categorical(A,valueset,Ordinal=true)
sizes = 3×2 categorical
     medium      large  
     small       medium 
     large       small  

基于整数的有序分类数组

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

A2 = [2 3; 1 2; 3 1];
valueset = 1:3;
catnames = ["small" "medium" "large"];

sizes2 = categorical(A2,valueset,catnames,Ordinal=true)
sizes2 = 3×2 categorical
     medium      large  
     small       medium 
     large       small  

比较 sizessizes2

isequal(sizes,sizes2)
ans = logical
   1

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

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

要将有序分类数组转换为非有序数组,请使用不带 Ordinal 名称-值参量的 categorical 函数。

sizes3 = categorical(sizes)
sizes3 = 3×2 categorical
     medium      large  
     small       medium 
     large       small  

确定分类数组是否为有序。

isordinal(sizes3)
ans = logical
   0

sizes3 转换为有序分类数组。

sizes3 = categorical(sizes3,Ordinal=true);
isordinal(sizes3)
ans = logical
   1

sizes3 现在是一个与 sizessizes2 等效的 3×2 有序分类数组。

使用有序分类数组

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

另请参阅

| | |

主题