exponenta event banner

Управление переменным размером массива ячеек

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

Чтобы создать массив ячеек переменного размера, выполните следующие действия.

  • Создайте массив ячеек с помощью 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

См. также

Связанные темы