exponenta event banner

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

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

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

Если код 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

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

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

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

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

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

sortrows

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

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

splitvars

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

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

stack

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

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

unstack

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

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

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

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

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

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

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

varfun

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

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

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

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

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

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

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

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

См. также

| | |

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