分类数组

分类数组是定性数据数组,其值取自由离散数据、非数值数据组成的有限集。[大谦MATLAB,dqmatlab点com]

创建分类数组

【例2-60】用categorical函数创建分类数组。

在命令窗口中输入:

code.matlab
S=categorical({'大';'小';'中';'小';'大'})
S =
     大
     小
     中
     小
     大

【例2-61】用categories函数显示类别,类别用分类数组中的唯一元素值区分。

在命令窗口中输入:

code.matlab
categories(S)
ans =
    '中'
    '大'
    '小'

【例2-62】用categorical函数创建有序分类数组。

下面先创建一个数值数组:

code.matlab
A=[1 3;2 1;2 3]
A =
     1     3
     2     1
     2     3

然后用categorical函数将A转换为有序分类数组,其中1、2和3分别表示类别'少年'、'青年'和'中年'。

code.matlab
valueset=[1:3];
catnames={'少年','青年','中年'};
B=categorical(A,valueset,catnames,'Ordinal',true)
B =
     少年      中年
     青年      少年
     青年      中年

用iscategorical函数可以确定输入是否为分类数组,用iscategory函数可以测试分类数组的类别。

修改分类数组

1.添加类别

【例2-63】用addcats函数可以向分类数组添加类别,可以添加到分类数组的末尾,也可以指定位置并指定在该位置的前面或后面添加类别。

在命令窗口中输入:

code.matlab
A=categorical({'大','小','中';'小','大','小'});
categories(A)
ans =
    '中'
    '大'
    '小'
B=addcats(A, {'很大','微小'});
categories(B)
ans =
    '中'
    '大'
    '小'
    '很大'
    '微小'

【例2-64】为了演示在指定位置插入类别,先创建一个有序分类数组。

在命令窗口中输入:

code.matlab
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。

code.matlab
B=addcats(A, 'xs','Before','s');
categories(B)
ans =
    'xs'
    's'
    'm'
    'l'
    'xl'

2.设置新类别

【例2-65】用setcats函数可以为分类数组设置新类别。

对于下面的分类数组A,

code.matlab
A=categorical({'日用品','生鲜','熟食';'熟食','日用品','生鲜'});
A =
     日用品      生鲜       熟食
     熟食       日用品      生鲜

重新设置新类别。

code.matlab
B=setcats(A, {'日用品','生鲜','粮油'})
B =
     日用品            生鲜       <undefined>
     <undefined>      日用品      生鲜

原分类数组A中没有新指定类别的元素用<undefined>表示。可以直接赋值,如:

code.matlab
B(1,3)= '粮油';
B(2,1)= '粮油';
B
B =
     日用品      生鲜       粮油
     粮油       日用品      生鲜

3.合并类别

【例2-66】用mergecats函数可以合并分类。还可以指定要合并的多个类别,合并为第一个类别,或另外指定合并后的类别名称。

在命令窗口中输入:

code.matlab
A = categorical({'red';'blue';'pink';'red';'blue';'pink'});

将分类数组A中的类别'red'和'pink'合并为'red'。

code.matlab
B=mergecats(A,{ 'red','pink'})
B =
     red
     blue
     red
     red
     blue
     red

也可以将合并后的类别指定为新名称。

code.matlab
B=mergecats(A,{ 'red','pink'}, '红色')
B =
     红色
     blue
     红色
     红色
     blue
     红色

4.删除类别

【例2-67】用removecats函数可以删除没使用的类别或指定的类别。

如下的分类数组A定义了3个类别,但是数组元素中只用到两个类别。

code.matlab
A = categorical({'red';'blue';'blue';'red';'blue';'red'},{'red','blue';'pink'});
categories(A)
ans =
    'red'
    'blue'
    'pink'

用removecats函数可以删除没有用到的'pink'类别。

code.matlab
B=removecats(A)
ans =
    'red'
    'blue'

也可以指定'pink'类别进行删除。

code.matlab
B=removecats(A, 'pink');