Code Generation for Categorical Arrays
Categorical arrays store data with values from a finite set of discrete categories. You can specify an order for the categories, but it is not required. A categorical array provides efficient storage and manipulation of nonnumeric data, while also maintaining meaningful names for the values.
When you use categorical arrays with code generation, adhere to these restrictions:
Define Categorical Arrays for Code Generation
For code generation, use the categorical
function to create categorical
arrays. For example, suppose the input argument to your MATLAB® function is a numeric array of arbitrary size whose elements have values of
either 1
, 2
, or 3
. You can convert
these values to the categories small
, medium
, and
large
and turn the input array into a categorical array, as shown in
this code.
function c = foo(x) %#codegen c = categorical(x,1:3,{'small','medium','large'}); end
Allowed Operations on Categorical Arrays
For code generation, you are restricted to the operations on categorical arrays listed in this table.
Operation | Example | Notes |
---|---|---|
assignment operator: |
c = categorical(1:3,1:3,{'small','medium','large'}); c(1) = 'large'; | Code generation does not support using the assignment operator
|
relational operators: |
c = categorical(1:3,'Ordinal',true);
tf = c(1) < c(2);
| Code generation supports all relational operators. |
cast to numeric type |
c = categorical(1:3); double(c(1)); | Code generation supports casting categorical arrays to arrays of double- or single-precision floating-point numbers, or to integers. |
conversion to text |
c = categorical(1:3,1:3,{'small','medium','large'}); c1 = cellstr(c(1)); % One element c2 = cellstr(c); % Entire array | Code generation does not support using the To convert one or more elements of a categorical array to
text, use the |
indexing operation |
c = categorical(1:3,1:3,{'small','medium','large'}); idx = [1 2]; c(idx); idx = logical([1 1 0]); c(idx); | Code generation supports indexing by position, linear indexing, and logical indexing. |
concatenation |
c1 = categorical(1:3,1:3,{'small','medium','large'}); c2 = categorical(4:6,[2 1 4],{'medium','small','extra-large'}); c = [c1 c2]; | Code generation supports concatenation of categorical arrays along any dimension. |
MATLAB Toolbox Functions That Support Categorical Arrays
For code generation, you can use categorical arrays with these MATLAB toolbox functions: