分类数组的代码生成
分类数组存储其值来自离散类别有限集合的数据。您可以指定类别的顺序,但这不是必需的。分类数组可用来高效地存储和处理非数值数据,同时还为数值赋予有意义的名称。
在代码生成中使用分类数组时,请遵守以下限制:
为代码生成定义分类数组
对于代码生成,请使用 categorical
函数创建分类数组。例如,假设您的 MATLAB® 函数的输入参量是任意大小的数值数组,其元素的值为 1
、2
或 3
。您可以将这些值转换为类别 small
、medium
和 large
,并将输入数组转换为分类数组,如以下代码所示。
function c = foo(x) %#codegen c = categorical(x,1:3,{'small','medium','large'}); end
允许对分类数组执行的操作
对于代码生成,您只能对分类数组执行下表中列出的操作。
运算 | 示例 | 附注 |
---|---|---|
赋值运算符: |
c = categorical(1:3,1:3,{'small','medium','large'}); c(1) = 'large'; | 代码生成不支持使用赋值运算符
|
关系运算符: |
c = categorical(1:3,'Ordinal',true);
tf = c(1) < c(2);
| 代码生成支持所有关系运算符。 |
转换为数值类型 |
c = categorical(1:3); double(c(1)); | 代码生成支持将分类数组转换为双精度或单精度浮点数数组,或转换为整数。 |
转换为文本 |
c = categorical(1:3,1:3,{'small','medium','large'}); c1 = cellstr(c(1)); % One element c2 = cellstr(c); % Entire array | 代码生成不支持使用 要将分类数组中的一个或多个元素转换为文本,请使用 |
索引操作 |
c = categorical(1:3,1:3,{'small','medium','large'}); idx = [1 2]; c(idx); idx = logical([1 1 0]); c(idx); | 代码生成支持按位置索引、线性索引和逻辑索引。 |
串联 |
c1 = categorical(1:3,1:3,{'small','medium','large'}); c2 = categorical(4:6,[2 1 4],{'medium','small','extra-large'}); c = [c1 c2]; | 代码生成支持沿任一维度串联分类数组。 |
支持分类数组的 MATLAB 工具箱函数
对于代码生成,您可以将分类数组与以下 MATLAB 工具箱函数结合使用: