Генератор кода классифицирует массив ячеек переменного размера как однородный. Элементы массива ячеек должны иметь одинаковый класс. В сгенерированном коде массив ячеек представлен как массив.
Чтобы сделать массив ячеек переменным размером:
Создайте массив ячеек при помощи cell
функция. Для примера:
function z = mycell(n, j) %#codegen assert (n < 100); 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}; if n > 3 c = {1 2 3 4}; end z = c{n}; end
Заставьте массив ячеек иметь переменный размер при помощи coder.varsize
. Рассмотрим этот код:
function y = mycellfun() %#codegen c = {1 2 3}; coder.varsize('c', [1 10]); y = c{1}; 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