Категориальные массивы хранят данные со значениями из конечного набора дискретных категорий. Вы можете задать порядок для категорий, но он не требуется. Категориальный массив обеспечивает эффективное хранение и манипуляцию нечисловыми данными, а также сохраняет значимые имена для значений.
Когда вы используете категориальные массивы с генерацией кода, придерживайтесь следующих ограничений:
Для генерации кода используйте 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 toolbox: