使用受保护的分类数组
此示例展示如何使用包含受保护类别的类别数组。
类创建分类数组时分类
函数时,您可以选择指定类别是否受保护。顺序分类数组始终具有受保护的类别,但也可以使用“保护”,真的
名称-值对参数。
当您分配不在数组类别列表中的值时,数组将自动更新,以便其类别列表包含新值。类似地,您可以组合具有不同类别的(非序数)分类数组。结果中的类别包括来自两个数组的类别。
当你给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
.
另请参阅
addcats
|分类
|类别
|isordinal
|isprotected
|总结