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

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

Создание табличных ограничений

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

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

Ограничения

Любые входные параметры

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

  • Вы не можете задать аргументы name-value с помощью Name=Value синтаксис при составлении таблиц с table функция.

Таблица составлена от входных массивов

  • Необходимо задать имена переменных при помощи '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 использует перечисленные в таблице функции, то у генерации кода есть эти ограничения.

Функция

Ограничения

addvars

  • Вы не можете задать аргументы name-value с помощью Name=Value синтаксис.

convertvars

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

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

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

innerjoin

  • В общем случае входные таблицы не могут иметь никаких неключевых переменных с теми же именами. Однако можно соединить подмножества входных таблиц, если вы задаете 'LeftVariables' и 'RightVariables' аргументы name-value. Задайте эти аргументы так, чтобы никакое имя переменной не появлялось в обоих 'LeftVariables' и 'RightVariables'.

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

    • 'Keys'

    • 'LeftKeys'

    • 'RightKeys'

    • 'LeftVariables'

    • 'RightVariables'

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

intersect

setdiff

setxor

union

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

issortedrows

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

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

join

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

    • 'KeepOneCopy', где вы перечисляете переменные, чтобы взять из левой входной таблицы только.

    • 'LeftVariables' и 'RightVariables', где вы перечисляете переменные, чтобы взять или из левой входной таблицы или из правильной входной таблицы, но не обоих.

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

    • 'Keys'

    • 'LeftKeys'

    • 'RightKeys'

    • 'LeftVariables'

    • 'RightVariables'

    • 'KeepOneCopy'

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

movevars

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

outerjoin

  • Входные таблицы не могут иметь ключевых переменных с теми же именами если значение 'MergeKeys' true (логический 1).

  • В общем случае входные таблицы не могут иметь никаких неключевых переменных с теми же именами. Однако можно соединить подмножества входных таблиц, если вы задаете 'LeftVariables' и 'RightVariables' аргументы name-value. Задайте эти аргументы так, чтобы никакое имя переменной не появлялось в обоих 'LeftVariables' и 'RightVariables'.

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

    • 'Keys'

    • 'LeftKeys'

    • 'RightKeys'

    • 'MergeKeys'

    • 'LeftVariables'

    • 'RightVariables'

    • 'Type'

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

rows2vars

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

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

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

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

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

sortrows

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

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

splitvars

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

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

stack

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

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

unstack

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

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

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

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

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

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

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

varfun

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

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

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

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

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

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

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

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

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

| | |

Похожие темы