主要内容

分类数组的代码生成

分类数组存储其值来自离散类别有限集合的数据。您可以指定类别的顺序,但这不是必需的。分类数组可用来高效地存储和处理非数值数据,同时还为数值赋予有意义的名称。

在代码生成中使用分类数组时,请遵守以下限制:

为代码生成定义分类数组

对于代码生成,请使用 categorical 函数创建分类数组。例如,假设您的 MATLAB® 函数的输入参量是任意大小的数值数组,其元素的值为 123。您可以将这些值转换为类别 smallmediumlarge,并将输入数组转换为分类数组,如以下代码所示。

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

代码生成不支持使用 charstring 函数将分类值转换为文本。

要将分类数组中的一个或多个元素转换为文本,请使用 cellstr 函数。

索引操作

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 工具箱函数结合使用:

另请参阅

主题