分类数组是定性数据数组,其值取自由离散数据、非数值数据组成的有限集。[大谦MATLAB,dqmatlab点com]
创建分类数组
【例2-60】用categorical函数创建分类数组。
在命令窗口中输入:
S=categorical({'大';'小';'中';'小';'大'})
S =
大
小
中
小
大
【例2-61】用categories函数显示类别,类别用分类数组中的唯一元素值区分。
在命令窗口中输入:
categories(S)
ans =
'中'
'大'
'小'
【例2-62】用categorical函数创建有序分类数组。
下面先创建一个数值数组:
A=[1 3;2 1;2 3]
A =
1 3
2 1
2 3
然后用categorical函数将A转换为有序分类数组,其中1、2和3分别表示类别'少年'、'青年'和'中年'。
valueset=[1:3];
catnames={'少年','青年','中年'};
B=categorical(A,valueset,catnames,'Ordinal',true)
B =
少年 中年
青年 少年
青年 中年
用iscategorical函数可以确定输入是否为分类数组,用iscategory函数可以测试分类数组的类别。
修改分类数组
1.添加类别
【例2-63】用addcats函数可以向分类数组添加类别,可以添加到分类数组的末尾,也可以指定位置并指定在该位置的前面或后面添加类别。
在命令窗口中输入:
A=categorical({'大','小','中';'小','大','小'});
categories(A)
ans =
'中'
'大'
'小'
B=addcats(A, {'很大','微小'});
categories(B)
ans =
'中'
'大'
'小'
'很大'
'微小'
【例2-64】为了演示在指定位置插入类别,先创建一个有序分类数组。
在命令窗口中输入:
A = categorical({'m' 'l'; 's' 'xl'; 'l' 'm'},{'s' 'm' 'l' 'xl'},'Ordinal',true)
A =
m l
s xl
l m
A是有序分类数组,指定的排序为s < m < l < xl。下面在s类别前添加类别xs。
B=addcats(A, 'xs','Before','s');
categories(B)
ans =
'xs'
's'
'm'
'l'
'xl'
2.设置新类别
【例2-65】用setcats函数可以为分类数组设置新类别。
对于下面的分类数组A,
A=categorical({'日用品','生鲜','熟食';'熟食','日用品','生鲜'});
A =
日用品 生鲜 熟食
熟食 日用品 生鲜
重新设置新类别。
B=setcats(A, {'日用品','生鲜','粮油'})
B =
日用品 生鲜 <undefined>
<undefined> 日用品 生鲜
原分类数组A中没有新指定类别的元素用<undefined>表示。可以直接赋值,如:
B(1,3)= '粮油';
B(2,1)= '粮油';
B
B =
日用品 生鲜 粮油
粮油 日用品 生鲜
3.合并类别
【例2-66】用mergecats函数可以合并分类。还可以指定要合并的多个类别,合并为第一个类别,或另外指定合并后的类别名称。
在命令窗口中输入:
A = categorical({'red';'blue';'pink';'red';'blue';'pink'});
将分类数组A中的类别'red'和'pink'合并为'red'。
B=mergecats(A,{ 'red','pink'})
B =
red
blue
red
red
blue
red
也可以将合并后的类别指定为新名称。
B=mergecats(A,{ 'red','pink'}, '红色')
B =
红色
blue
红色
红色
blue
红色
4.删除类别
【例2-67】用removecats函数可以删除没使用的类别或指定的类别。
如下的分类数组A定义了3个类别,但是数组元素中只用到两个类别。
A = categorical({'red';'blue';'blue';'red';'blue';'red'},{'red','blue';'pink'});
categories(A)
ans =
'red'
'blue'
'pink'
用removecats函数可以删除没有用到的'pink'类别。
B=removecats(A)
ans =
'red'
'blue'
也可以指定'pink'类别进行删除。
B=removecats(A, 'pink');