exponenta event banner

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

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

Если массив ячеек является вводом функции точки входа, то для придания ему переменного размера используйте 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

См. также

|

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