Ограничения таблицы для генерации кода

Если вы создаете таблицы, изменяете их или используете функции таблицы в MATLAB® код, который вы планируете для генерации кода, тогда генерация кода имеет ограничения, описанные в следующих разделах. Ограничения, которые применяются к классам, также применяются к таблицам. Для получения дополнительной информации об ограничениях классов смотрите Определение классов MATLAB для Генерации кода (MATLAB Coder).

Создание ограничений для таблиц

Если ваш код MATLAB создает таблицы, то генерация кода имеет эти ограничения.

Входные параметры для создания таблицы

Ограничения

Любые входы

  • Имена табличных переменных не должны быть допустимыми идентификаторами MATLAB. Имена должны состоять из символов ASCII, которые могут включать запятые, штрихи и пробелы.

Таблица, созданная из входных массивов

  • Вы должны задать имена переменных при помощи 'VariableNames' аргумент имя-значение при создании таблиц из входных массивов при помощи table, array2table, или cell2table функций.

Таблица, созданная с предварительно выделенными переменными

  • Вы не должны указывать 'VariableNames' аргумент при предварительном выделении таблицы с помощью table функции и 'Size' аргумент имя-значение.

  • При помощи 'VariableTypes' можно задать только следующие типы данных аргумент имя-значение:

    • 'double'

    • 'single'

    • 'doublenan' или 'doubleNaN'

    • 'singlenan' или 'singleNaN'

    • 'int8''int16''int32', или 'int64'

    • 'uint8''uint16''uint32', или 'uint64'

    • 'logical'

    • 'duration'

    • 'cellstr'

    • 'char'

Изменение ограничений таблиц

Если ваш код MATLAB изменяет данные в таблице или ее свойства, то генерация кода имеет эти ограничения.

Операция с таблицей или свойство

Ограничения

VariableNames, RowNames, DimensionNames, или UserData свойства

  • Вы не можете изменить VariableNames, RowNames, DimensionNames, или UserData свойства таблицы после ее создания.

    Можно задать 'VariableNames', 'RowNames', и 'DimensionNames' входные параметры при создании таблицы. Эти входные параметры определяют свойства.

Индексы таблицы, которые задают переменные как входные параметры в сгенерированный код

  • Чтобы передать индексы таблицы, которые задают переменные как входные параметры в сгенерированный код, сначала сделайте индексы постоянными при помощи coder.Constant функция. Если индексы таблицы не являются постоянными, то индексация в переменные приводит к ошибке.

Пользовательские метаданные

  • Вы не можете добавить пользовательские метаданные в таблицу. addprop и rmprop функции не поддерживаются.

Назначения, которые изменяют размер таблицы

  • Вы не можете изменить размер таблицы по назначениям. Для примера добавление новой строки приводит к ошибке.

    function T = foo() %#codegen
        T = table((1:3)',(1:3)','VariableNames',{'Var1','Var2'});
        T(4,2) = 5;
    end
    

    Удаление строки или переменной также приводит к ошибке.

Вертикальная конкатенация

  • Когда вы вертикально конкатенируете таблицы, они должны иметь одинаковые имена переменных в том же порядке. В MATLAB имена переменных должны быть одинаковыми, но могут быть в разных порядках в таблицах.

Горизонтальная конкатенация

  • Когда вы горизонтально соединяете таблицы, и таблицы имеют имена строк, они должны иметь одинаковые имена строк в том же порядке. В MATLAB имена строк должны быть одинаковыми, но могут быть в разных порядках в таблицах.

Табличные переменные, которые являются N-D массивами ячеек

  • Если две таблицы имеют переменные, которые являются N-D массивами ячеек, то таблицы не могут быть вертикально конкатенированы.

  • Вы не можете использовать фигурные скобки, чтобы извлечь данные из нескольких табличных переменных, которые являются массивами N-D ячеек, потому что эта операция является горизонтальной конкатенацией.

Использование ограничений функций таблицы

Если ваш код MATLAB использует функции, перечисленные в таблице, то генерация кода имеет эти ограничения.

Функция

Ограничения

convertvars

  • Указатели на функцию не поддерживаются.

  • Второй и третий входные параметры (vars и dataType) должна быть постоянной.

  • Вы не можете задать dataType как 'char'.

intersect

setdiff

setxor

union

  • Эти функции поддерживают несортированные таблицы во всех случаях. Вы не должны указывать 'stable' опция.

issortedrows

  • Входной параметр vars должен быть постоянным.

  • Если какие-либо табличные переменные имеют несколько столбцов, то эти переменные должны иметь фиксированные ширины.

join

  • В целом входе таблицы не могут иметь неключевых переменных с одинаковыми именами. Однако можно задать повторяющиеся имена переменных в входных таблицах при помощи:

    • 'KeepOneCopy'

    • 'LeftVariables' и 'RightVariables'

  • Значения этих аргументов в виде имя-значение должны быть постоянными:

    • 'Keys'

    • 'LeftKeys'

    • 'RightKeys'

    • 'LeftVariables'

    • 'RightVariables'

    • 'KeepOneCopy'

  • Вложенные таблицы не поддерживаются.

movevars

  • Входной параметр vars не может содержать повторяющиеся имена переменных.

rows2vars

  • Входная таблица не может быть переменным размером.

  • The 'VariableNamesSource' аргумент имя-значение не поддерживается.

  • Значение 'DataVariables' аргумент имя-значение должен быть постоянным.

  • Значение 'VariableNamingRule' аргумент имя-значение должен быть постоянным.

  • Если вы присваиваете имена строк входа таблице, вектор имен строк должен быть постоянным.

sortrows

  • Входной параметр vars должен быть постоянным.

  • Если tblA имеет переменную, которая является массивом ячеек из векторов символов с несколькими столбцами, тогда вы не можете отсортировать таблицу, используя значения этой переменной.

splitvars

  • Значение 'NewVariableNames' аргумент имя-значение должен быть постоянным.

  • Разделяемые переменные не могут иметь переменное количество столбцов.

stack

  • Второй входной параметр, vars, должно быть постоянным.

  • Значения 'ConstantVariables', 'NewDataVariableName', и 'IndexVariableName' аргументы имя-значение должны быть постоянными.

unstack

  • The 'NewDataVariableNames' необходимо указать аргумент имя-значение. Его значение должно быть постоянным.

  • The vars и ivars входные параметры (переменные данных и переменные индикатора) должны быть постоянными.

  • Если вы задаете сгруппированные переменные и постоянные переменные, то они должны быть постоянными.

  • Если вы задаете функцию агрегации, то она должна быть постоянной.

  • Если переменный вход таблицы является массивом ячеек с векторами символов, то unstack заполняет пустые камеры соответствующей выходной переменной символьными массивами 1 на 0 в сгенерированном коде. В MATLAB, unstack заполняет такие погрешности символьными массивами 0 на 0.

  • unstack функция не поддерживает генерацию кода, когда входная таблица имеет переменную, которая является гетерогенным массивом ячеек, который не может быть преобразован в однородный массив ячеек.

    • Если вход имеет переменную, которая является однородным массивом ячеек или которая может быть преобразована в единицу, то 'AggregationFunction' необходимо указать аргумент имя-значение. Значение по умолчанию 'AggregationFunction' является 'unique'. Но unique функция не поддерживает массивы ячеек.

varfun

  • Вход указателя на функцию, func, должно быть постоянным.

  • В то время как указатели на функцию могут быть входами в varfun сами они не могут быть входами в ваши функции точки входа. Задайте func в коде, предназначенном для генерации кода. Для получения дополнительной информации смотрите Ограничения указателя на функцию для генерации кода (MATLAB Coder).

  • Значения для всех аргументов в виде имя-значение должны быть постоянными.

  • The 'ErrorHandler' аргумент имя-значение не поддерживается для генерации кода.

  • Входные параметры переменного размера не поддерживаются.

  • Сгруппированные переменные не могут иметь повторяющихся значений в сгенерированном коде.

  • Вы не можете задать значение 'OutputFormat' как 'cell' если вы задаете 'GroupingVariables' аргумент имя-значение, и функция возвращает различные типы данных для каждой переменной, заданной в 'InputVariables'.

  • Если вы задаете группы, и количество групп не известно во время компиляции, и это число равняется нулю, то пустые двойные переменные в выходе могут иметь размеры 1 на 0 в сгенерированном коде. В MATLAB такие переменные имеют размеры 0 на 0.

См. также

| | |

Похожие темы