Управляйте, является ли массив ячеек Переменным Размером

Генератор кода классифицирует массив ячеек переменного размера как гомогенный. Элементы массива ячеек должны иметь тот же класс. В сгенерированном коде массив ячеек представлен как массив.

Сделать переменный размер массива ячеек:

  • Создайте массив ячеек при помощи функции 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:10.

    Чтобы обеспечить c, чтобы быть гомогенными, но не переменный размер, укажите, что ни одна из размерностей не отличается. Например:

    function y =  mycell()
    %#codegen
    c = {1 [2 3]};
    coder.varsize('c', [1 2], [0 0]);
    y = c{2};
    end

Смотрите также

Похожие темы