主要内容

使用受保护的分类数组

此示例演示了如何使用包含受保护类别的分类数组。

当使用 categorical 函数创建分类数组时,您可以选择指定是否保护类别。有序分类数组始终具有受保护的类别,但您也可以使用 Protected 名称-值参量创建受保护的非有序分类数组。

当指定的值不是类别的成员时,该数组将自动更新,以便其类别列表中包括该新值。类似地,您可以合并具有不同类别的(非有序)分类数组。生成的类别中将同时包括这两个数组中的类别。

在向受保护的分类数组指定新值时,这些值必须属于现有类别之一。类似地,您只能合并具有相同类别的受保护数组。

  • 如果要合并具有受保护类别的两个非有序分类数组,则它们必须具有相同的类别,顺序无关紧要。生成的分类数组使用第一个数组中的类别顺序。

  • 如果要合并始终具有受保护类别的两个有序分类数组,则它们必须具有相同的类别,顺序也必须相同。

要向该数组添加新类别,必须使用 addcats 函数。

创建有序分类数组

创建一个大小包含 10 个对象的分类数组。对值 "S""M""L" 应用类别名称 smallmediumlarge

A = categorical(["M";"L";"S";"S";"M";"L";"M";"L";"M";"S"], ...
                ["S" "M" "L"], ...
                ["small" "medium" "large"], ...
                "Ordinal",true)
A = 10×1 categorical
     medium 
     large 
     small 
     small 
     medium 
     large 
     medium 
     large 
     medium 
     small 

显示 A 的类别。

categories(A)
ans = 3×1 cell
    {'small' }
    {'medium'}
    {'large' }

验证类别是否受保护

当创建有序分类数组时,这些类别始终受保护。

使用 isprotected 函数验证 A 的类别是否受保护。

tf = isprotected(A)
tf = logical
   1

A 的类别受保护。

指定新类别值

如果尝试指定一个不属于任何现有类别的新类别值,则 MATLAB® 将返回错误。例如,您无法像表达式 A(2) = "xlarge" 中一样将值 "xlarge" 赋给分类数组,因为 xlarge 不是 A 的类别。MATLAB 会返回以下错误:

Error using  ()  (line 57)
Cannot add a new category 'xlarge' to this categorical array because its categories are protected.  Use
ADDCATS to add the new category.

要为 xlarge 添加新类别,请使用 addcats 函数。因为 A 是有序的,所以必须指定新类别的顺序。

A = addcats(A,"xlarge",After="large");

现在,使用 "xlarge" 进行赋值,因为它属于现有类别。

A(2) = "xlarge"
A = 10×1 categorical
     medium 
     xlarge 
     small 
     small 
     medium 
     large 
     medium 
     large 
     medium 
     small 

A 现在是一个包含四个类别的 10×1 分类数组,其中 small < medium < large < xlarge

合并两个有序分类数组

创建另外一个有序分类数组 B,其大小包含五个项目。

B = categorical([2;1;1;2;2],1:2,["xsmall" "small"],Ordinal=true)
B = 5×1 categorical
     small 
     xsmall 
     xsmall 
     small 
     small 

B 是一个包含两个类别的 5×1 分类数组,其中 xsmall < small

要合并两个始终具有受保护类别的有序分类数组,它们必须具有相同的类别,而且这些类别的顺序也必须相同。

将类别 xsmall 添加到 A 的类别 small 之前。

A = addcats(A,"xsmall",Before="small");

categories(A)
ans = 5×1 cell
    {'xsmall'}
    {'small' }
    {'medium'}
    {'large' }
    {'xlarge'}

将类别 mediumlargexlarge 添加到 B 的类别 small 之后。

B = addcats(B,["medium" "large" "xlarge"],After="small");

categories(B)
ans = 5×1 cell
    {'xsmall'}
    {'small' }
    {'medium'}
    {'large' }
    {'xlarge'}

AB 的类别现在相同,包括其顺序也相同。

垂直串联 AB

C = [A;B]
C = 15×1 categorical
     medium 
     xlarge 
     small 
     small 
     medium 
     large 
     medium 
     large 
     medium 
     small 
     small 
     xsmall 
     xsmall 
     small 
     small 

B 中的值将追加到 A 中的值之后。

列出 C 的类别。

categories(C)
ans = 5×1 cell
    {'xsmall'}
    {'small' }
    {'medium'}
    {'large' }
    {'xlarge'}

C 是一个包含五个类别的 16×1 有序分类数组,其中 xsmall < small < medium < large < xlarge

另请参阅

| | | | |

主题