文档

使用受保护的分类数组

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

类创建分类数组时分类函数时,您可以选择指定类别是否受保护。顺序分类数组始终具有受保护的类别,但也可以使用“保护”,真的名称-值对参数。

当您分配不在数组类别列表中的值时,数组将自动更新,以便其类别列表包含新值。类似地,您可以组合具有不同类别的(非序数)分类数组。结果中的类别包括来自两个数组的类别。

当你给a赋新值时受保护的类别数组时,值必须属于现有类别之一。同样,只能组合具有相同类别的受保护数组。

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

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

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

创建序号分类数组

创建一个包含10个对象大小的分类数组。使用名字媒介,对于这些值“年代”“米”,“L”

A = categorical({“米”“L”“年代”“年代”“米”“L”“米”“L”“米”“年代”},...“年代”“米”“L”},{“小”“媒介”“大”},“顺序”,真正的)
一个=10x1分类数组中,大,小,中,大,中,大,中,小

一个是一个10 × 1的分类数组。

显示类别一个

类别(A)
ans =3x1单元阵列{'小'}{'中'}{'大'}

验证类别是否受到保护

创建序号分类数组时,类别始终受到保护。

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

tf = isprotected(A)
tf =逻辑1

的类别一个受到保护。

在新类别中分配值

如果尝试分配不属于现有类别之一的新值,则MATLAB®将返回错误。例如,您不能分配值“超大”到分类数组,如表达式中所示A(2) = 'xlarge',因为超大不是一个范畴吗一个.相反,MATLAB®返回错误:

使用categorical/subsasgn错误(第68行)

无法向此分类数组添加新类别“xlarge”

因为它的类别是受保护的。使用ADDCATS

添加新类别。

为添加一个新类别超大,使用addcats函数。自一个是有序的,您必须为新类别指定顺序。

A = addcats(A,“超大”“后”“大”);

现在,为赋值“超大”,因为它有一个现有的类别。

(2) =“超大”
一个=10x1分类数组中xlarge,小号,小号,中大号,中大号,中小号

一个现在是一个有四个类别的10 × 1分类数组,这样吗小号<中号<大号< xlarge

组合两个有序分类数组

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

B = categorical([2;1;1;2;2],1:2,{“xsmall”“小”},“顺序”,真正的)
B =5x1分类数组小x小x小小小

B有两个类别的5乘1分类数组是这样的吗Xsmall < small

要组合两个有序分类数组(总是具有受保护的类别),它们必须具有相同的类别,并且类别必须具有相同的顺序。

添加类别“xsmall”一个类别之前“小”

A = addcats(A,“xsmall”“之前”“小”);类别(A)
ans =5x1单元阵列{' xsmall}{‘小’}{‘中等’}{‘大’}{“超大”}

添加类别{“媒介”,“大”,“超大”}B在类别之后“小”

B = addcats(B,{“媒介”“大”“超大”},“后”“小”);类别(B)
ans =5x1单元阵列{' xsmall}{‘小’}{‘中等’}{‘大’}{“超大”}

的类别一个而且B现在包括他们的顺序都是一样的。

垂直连接一个而且B

C = [a; b]
C =15x1分类数组中xlarge,小,小,中,大,中,大,中,小,小xsmall, xsmall,小,小

的值B附加到的值一个

列出类别C

类别(C)
ans =5x1单元阵列{' xsmall}{‘小’}{‘中等’}{‘大’}{“超大”}

C一个16乘1的有序分类数组有五个类别,这样吗Xsmall < small < medium < large < xlarge

另请参阅

|||||

相关的例子

更多关于

这个话题有用吗?