这个例子展示了如何创建一个分类数组。分类
是一种数据类型,用于存储具有来自有限离散类别集的值的数据。这些类别可以有一个自然的顺序,但这不是必需的。分类数组提供了有效的数据存储和方便的数据操作,同时还为值维护有意义的名称。类别数组常用于表中定义行组。
默认情况下,类别数组包含没有数学排序的类别。例如,宠物类别的离散集合{'狗' '猫' '鸟'}
没有意义的数学排序,所以MATLAB®使用字母排序{'鸟' '猫' '狗'}
.序数类别数组包含具有有意义的数学排序的类别。例如,大小类别的离散集合{'小','中','大'}
有数学顺序小的<中的<大的
.
当从字符向量的单元格数组或字符串数组创建分类数组时,将删除前导和尾随空格。例如,如果您指定文本{'cat' 'dog'}作为类别,那么当您将它们转换为类别时,它们就变成{'cat' 'dog'}。
您可以使用分类
函数从数字数组、逻辑数组、字符串数组、字符向量的单元格数组或现有的类别数组创建类别数组。
创建一个包含新英格兰州名的字符向量的1 × 11单元格数组。
状态= {“马”,“我”,“CT”,“v”,“我”,“NH”,“v”,“马”,“NH”,“CT”,“扶轮”};
转换单元格数组,状态
,到一个没有数学顺序的类别数组。
状态=绝对的(状态)
状态=1x11分类数组第1至9列MA ME CT VT ME NH VT MA NH第10至11列CT RI
类(状态)
Ans =“绝对的”
列出变量中的离散类别状态
.
类别(状态)
ans =6x1单元阵列{' ct '} {' ma '} {' me '} {' nh '} {' ri '} {' vt '}
这些类别是按字母顺序列出的。
创建一个1 × 8的字符向量单元格数组,包含8个对象的大小。
AllSizes = {“媒介”,“大”,“小”,“小”,“媒介”,...“大”,“媒介”,“小”};
单元格数组,AllSizes
,有三个不同的值:“大”
,“媒介”
,“小”
.对于字符向量的单元格数组,没有方便的方法来表示这一点小的<中的<大的
.
转换单元格数组,AllSizes
,到一个序数分类数组。使用valueset
要指定这些值小
,媒介
,大
,它们定义了类别。对于序号类别数组,指定的第一个类别是最小的,最后一个类别是最大的。
值集= {“小”,“媒介”,“大”};sizeOrd = categorical(AllSizes,valueset,“顺序”,真正的)
sizeOrd =1x8分类数组第1至6列中、大、小、中、大第7至8列中、小
类(sizeOrd)
Ans =“绝对的”
分类数组中值的顺序,sizeOrd
,保持不变。
列出类别变量中的离散类别,sizeOrd
.
类别(sizeOrd)
ans =3x1单元阵列{'小'}{'中'}{'大'}
类别按指定的顺序列出,以匹配数学顺序小的<中的<大的
.
创建一个包含100个0到50之间随机数的向量。
X =兰特(100,1)*50;
使用离散化
函数通过对的值进行分组来创建类别数组x
.把0到15之间的所有值放在第一个箱子里,把15到35之间的所有值放在第二个箱子里,把35到50之间的所有值放在第三个箱子里。每个bin都包括左端点,但不包括右端点。
猫名= {“小”,“媒介”,“大”};binnedData = discrete alize (x,[0 15 35 50],“分类”, catnames);
binnedData
一个包含三个类别的100 × 1序数类别数组是这样的吗小的<中的<大的
.
使用总结
函数来打印每个类别中的元素数量。
总结(binnedData)
小的30中的35大的35
从R2016b开始,您可以使用字符串
函数并将它们转换为分类数组。
创建一个包含行星名称的字符串数组。
STR = string“地球”,“木星”,“海王星”,“木星”,“火星”,“地球”})
str =1x6字符串数组"地球" "木星" "海王星" "木星" "火星" "地球"
转换str
到一个类别数组。
行星=类别(str)
行星=1x6分类阵列地球木星海王星木星火星地球
添加缺失的元素str
然后把它转换成一个分类数组。在哪里str
有缺失的值,行星
没有定义值。
str (8) =“火星”
str =1x8字符串数组第1至6列“地球”“木星”“海王星”“木星”“火星”“地球”第7至8列<缺少>“火星”
行星=类别(str)
行星=1x8分类数组第1至6列地球木星海王星木星火星地球第7至8列<未定义>火星