exponenta event banner

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

При создании, изменении или использовании табличных функций в коде MATLAB ®, предназначенных для создания кода, создание кода имеет ограничения, описанные в следующих разделах. Ограничения, применимые к классам, также применяются к таблицам. Дополнительные сведения об ограничениях класса см. в разделе Определение классов 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 в коде, предназначенном для генерации кода. Дополнительные сведения см. в разделе Ограничения обработки функций для генерации кода (кодер MATLAB).

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

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

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

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

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

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

См. также

| | |

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