Генератор кода классифицирует массив ячеек переменного размера как однородный. Элементы массива ячеек должны иметь одинаковый класс. В сгенерированном коде массив ячеек представлен как массив.
Если массив ячеек является входным параметром функции точки входа, чтобы сделать его переменным размером, используйте coder.typeof
или coder.newtype
чтобы создать тип для массива ячеек переменного размера. Например, чтобы создать тип для массива ячеек, первая размерность которого фиксирована и второе измерение которого имеет верхнюю границу 10, используйте этот код:
t = coder.typeof({1 2 3}, [1 10], [0 1])
См. «Задание входных параметров массива ячеек переменного размера».
Если массив ячеек не является входным параметром функции точки входа, сделать его переменным:
Создайте массив ячеек при помощи cell
функция. Для примера:
function z = mycell(n, j) %#codegen x = cell(1,n); for i = 1:n x{i} = i; end z = x{j}; end
Для генерации кода, когда вы создаете массив ячеек переменного размера при помощи cell
, вы должны придерживаться определенных ограничений. См. Определение массива ячеек переменного размера при помощи камеры.
Вырастите массив ячеек. Для примера:
function z = mycell(n) %#codegen c = {1 2 3}; for i = 1:n c{end + 1} = 1; end z = c{n}; end
Заставьте массив ячеек иметь переменный размер при помощи coder.varsize
. Рассмотрим этот код:
function y = mycellfun() %#codegen c = {1 2 3}; coder.varsize('c', [1 10]); y = c; end
Без coder.varsize
, c
фиксированный размер с размерностями 1 на 3. С coder.varsize
, c
является переменным размером с верхней границей 10.
Иногда, используя coder.varsize
изменяет классификацию массива ячеек с неоднородной на однородную. Рассмотрим этот код:
function y = mycell() %#codegen c = {1 [2 3]}; y = c{2}; end
Генератор кода классифицирует c
как неоднородный, поскольку элементы имеют разные размеры. c
фиксированный размер с размерностями 1 на 2. Если вы используете coder.varsize
с c
, он становится однородным. Для примера:
function y = mycell() %#codegen c = {1 [2 3]}; coder.varsize('c', [1 10], [0 1]); y = c{2}; end
c
становится однородным массивом ячеек переменного размера с размерностями 1-by-: 10.
Для принудительного c
чтобы быть однородным, но не переменным размером, задайте, что ни одна из размерностей не изменяется. Для примера:
function y = mycell() %#codegen c = {1 [2 3]}; coder.varsize('c', [1 2], [0 0]); y = c{2}; end
coder.CellType
| coder.varsize