Matlab:创建分类数组
- 基于字符串数组创建分类数组
- 添加新元素和缺失的元素
- 基于字符串数组创建有序分类数组
- 基于分 bin 数值数据创建有序分类数组
此示例说明如何创建分类数组。categorical 是一个数据类型,用来存储值来自一组有限离散类别的数据。这些分类可以采用自然排序,但并不要求一定如此。分类数组可用来有效地存储并方便地处理数据,同时还为数值赋予有意义的名称。您可以在表中使用分类数组来定义行组。
默认情况下,分类数组包含的是无数学排序的类别。例如,离散的宠物类别集合 [“dog”,“cat”,“bird”] 无有意义的数学排序,因此 MATLAB® 使用字母排序 [“bird”,“cat”,“dog”]。有序分类数组包含的类别具有有意义的数学排序。例如,离散的大小类别集合 [“small”,“medium”,“large”] 采用数学排序 small < medium < large。
当您基于字符串数组(或字符向量元胞数组)创建分类数组时,前导空格和尾随空格将被删除。例如,如果您将文本 [" cat",“dog”] 指定为类别,则在将它们转换为类别时,它们将变成 [“cat”,“dog”]。
基于字符串数组创建分类数组
您可以使用 categorical 函数基于数值数组、逻辑数组、字符串数组、字符向量元胞数组或现有的分类数组来创建分类数组。
创建一个包含新英格兰各州名称的 1×11 字符串数组。
state = ["MA","ME","CT","VT","ME","NH","VT","MA","NH","CT","RI"]
state = 1x11 string
Columns 1 through 9
"MA" "ME" "CT" "VT" "ME" "NH" "VT" "MA" "NH"
Columns 10 through 11
"CT" "RI"
将字符串数组 state 转换为无数学排序的分类数组。
state = categorical(state)
state = 1x11 categorical
Columns 1 through 9
MA ME CT VT ME NH VT MA NH
Columns 10 through 11
CT RI
列出变量 state 中的离散类别。state 中只列出六个唯一状态,也就是说有六个类别。这些类别按字母顺序列出。
categories(state)
ans = 6x1 cell
{‘CT’}
{‘MA’}
{‘ME’}
{‘NH’}
{‘RI’}
{‘VT’}
添加新元素和缺失的元素
向原始字符串数组添加元素。其中一个元素是缺失字符串,显示为 。正如 NaN 可以表示数值数组中的缺失值一样, 表示字符串数组中的缺失值。
state = ["MA","ME","CT","VT","ME","NH","VT","MA","NH","CT","RI"];
state = [string(missing) state];
state(13) = "ME"
state = 1x13 string
Columns 1 through 9
<missing> "MA" "ME" "CT" "VT" "ME" "NH" "VT" "MA"
Columns 10 through 13
"NH" "CT" "RI" "ME"
将字符串数组转换为 categorical 数组。缺失的字符串成为一个未定义的类别,显示为 。它指示分类数组中不属于任何分类的一个元素。
state = categorical(state)
state = 1x13 categorical
Columns 1 through 8
<undefined> MA ME CT VT ME NH VT
Columns 9 through 13
MA NH CT RI ME
基于字符串数组创建有序分类数组
创建一个包含八个对象的大小的 1×8 字符串数组。
AllSizes = ["medium","large","small","small","medium",...
"large","medium","small"];
字符串数组 AllSizes 包含三个不同值:“large”、“medium” 和 “small”。当使用字符串数组时,没有方便的方式来指示 small < medium < large。
将字符串数组 AllSizes 转换为有序分类数组。使用 valueset 指定用于定义类别的值 small、medium 和 large。对于有序分类数组,所指定的第一个类别是最小的,最后一个类别是最大的。
valueset = ["small","medium","large"];
sizeOrd = categorical(AllSizes,valueset,'Ordinal',true)
sizeOrd = 1x8 categorical
Columns 1 through 6
medium large small small medium large
Columns 7 through 8
medium small
分类数组 sizeOrd 中值的顺序保持不变。
列出分类变量 sizeOrd 中的离散类别。
categories(sizeOrd)
ans = 3x1 cell
{‘small’ }
{‘medium’}
{‘large’ }
这些类别按指定的顺序列出以匹配数学排序 small < medium < large。
基于分 bin 数值数据创建有序分类数组
创建由 0 到 50 之间的 100 个随机数构成的向量。
x = rand(100,1)*50;
使用 discretize 函数,通过对 x 的值进行分 bin,创建一个分类数组。将 0 到 15 之间的所有值归入第一个 bin,15 到 35 之间的所有值归入第二个 bin,35 到 50 之间的所有值归入第三个 bin。每个 bin 包括左端点,但不包括右端点。
catnames = ["small","medium","large"];
binnedData = discretize(x,[0 15 35 50],'categorical',catnames);
binnedData 是一个包含三个类别的 100×1 有序分类数组,其中 small < medium < large。
使用 summary 函数输出每个类别中的元素数量。
summary(binnedData)
small 30
medium 35
large 35
您可以生成分 bin 数据的各种图。例如,生成 binnedData 的饼图。
pie(binnedData)
该博文为原创文章,未经博主同意不得转。
本文章博客地址:https://cplusplus.blog.csdn.net/article/details/127909439