主要内容

本页翻译不是最新的。点击此处可查看最新英文版本。

代码生成的表限制

如果您在用于代码生成的 MATLAB® 代码中创建表、修改表或使用表函数,则代码生成存在下列各节中描述的限制。适用于类的限制也适用于表。有关类限制的详细信息,请参阅用于代码生成的 MATLAB 类定义 (MATLAB Coder)

创建表限制

如果您的 MATLAB 代码创建了表,则代码生成存在以下限制。

表创建的输入

限制

任何输入

  • 表变量名称不必是有效的 MATLAB 标识符。名称必须由 ASCII 字符组成,可以包括逗号、破折号和空白字符。

从输入数组创建的表

  • 通过使用 tablearray2tablecell2table 函数基于输入数组创建表时,必须使用 'VariableNames' 名称-值参量指定变量名称。

使用预分配变量创建的表

  • 当使用 table 函数和 'Size' 名称-值参量预分配表时,不必指定 'VariableNames' 参量。

  • 使用 'VariableTypes' 名称-值参量只能指定以下数据类型:

    • 'double'

    • 'single'

    • 'doublenan''doubleNaN'

    • 'singlenan''singleNaN'

    • 'int8''int16''int32''int64'

    • 'uint8''uint16''uint32''uint64'

    • 'logical'

    • 'duration'

    • 'cellstr'

    • 'char'

修改表限制

如果您的 MATLAB 代码修改了表中的数据或其属性,则代码生成存在以下限制。

表操作或属性

限制

VariableNamesRowNamesDimensionNamesUserData 属性

  • 创建表后,无法更改表的 VariableNamesRowNamesDimensionNamesUserData 属性。

    创建表时,您可以指定 'VariableNames''RowNames''DimensionNames' 输入参量。这些输入参量指定属性。

VariableTypes 属性

  • 创建表后,您将无法访问 VariableTypes 属性。

  • 当您在创建表的过程中预分配表时,您可以指定 'VariableTypes' 输入参量。

指定变量作为生成代码的输入参量的表索引

  • 要将指定变量作为输入参量的表索引传递到生成的代码中,请先使用 coder.Constant 函数将索引设为常量。如果表索引不是常量,则对变量进行索引会生成错误。

自定义元数据

  • 无法向表中添加自定义元数据。不支持 addproprmprop 函数。

更改表大小的赋值

  • 您无法通过赋值来更改表的大小。例如,添加新行会生成错误。

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

    删除行或变量也会生成错误。

垂直串联

  • 当您垂直串联表时,它们必须具有相同的变量名称,其顺序也必须相同。在 MATLAB 中,变量名称必须相同,但在表中的顺序可以不同。

水平串联

  • 当水平串联表并且这些表具有行名称时,它们必须具有相同的行名称,其顺序也需相同。在 MATLAB 中,行名称必须相同,但在表中的顺序可以不同。

由 N 维元胞数组组成的表变量

  • 如果两个表中的变量是 N 维元胞数组,则这两个表无法垂直串联。

  • 您无法使用花括号提取由 N 维元胞数组组成的多个表变量中的数据,因为此操作是水平串联。

使用表函数时的限制

如果您的 MATLAB 代码使用下表中列出的函数,则代码生成存在以下限制。

函数

限制

convertvars

  • 不支持函数句柄。

  • 第二个和第三个输入参量(varsdataType)必须为常量。

  • 您无法将 dataType 指定为 'cell''cellstr''char'

innerjoin

  • 通常,输入表不能有任何同名的非键变量。但是,如果指定 'LeftVariables''RightVariables' 名称-值参量,则可以联接输入表的子集。请指定这些参量,以便 'LeftVariables''RightVariables' 中不会出现变量名称。

  • 以下名称-值参量的值必须为常量:

    • 'Keys'

    • 'LeftKeys'

    • 'RightKeys'

    • 'LeftVariables'

    • 'RightVariables'

  • 不支持嵌套表。

intersect

setdiff

setxor

union

  • 这些函数在所有情况下都支持未排序的表。您不必指定 'stable' 选项。

issortedrows

  • 输入参量 vars 必须为常量。

  • 如果任何表变量有多列,则这些变量必须具有固定宽度。

join

  • 通常,输入表不能有同名的非键变量。但是,如果指定名称-值参量,则可以联接输入表的子集:

    • 'KeepOneCopy',仅列出要从左侧输入表中获取的变量。

    • 'LeftVariables''RightVariables',列出要从左侧输入表或右侧输入表(但不能同时包含两者)中获取的变量。

  • 以下名称-值参量的值必须为常量:

    • 'Keys'

    • 'LeftKeys'

    • 'RightKeys'

    • 'LeftVariables'

    • 'RightVariables'

    • 'KeepOneCopy'

  • 不支持嵌套表。

movevars

  • 输入参量 vars 不能包含重复的变量名称。

outerjoin

  • 除非 'MergeKeys' 的值为 true(逻辑值 1),否则输入表不能有同名的键变量。

  • 通常,输入表不能有任何同名的非键变量。但是,如果指定 'LeftVariables''RightVariables' 名称-值参量,则可以联接输入表的子集。请指定这些参量,以便 'LeftVariables''RightVariables' 中不会出现变量名称。

  • 以下名称-值参量的值必须为常量:

    • 'Keys'

    • 'LeftKeys'

    • 'RightKeys'

    • 'MergeKeys'

    • 'LeftVariables'

    • 'RightVariables'

    • 'Type'

  • 不支持嵌套表。

rows2vars

  • 输入表的大小不能是可变的。

  • 不支持 'VariableNamesSource' 名称-值参量。

  • 'DataVariables' 名称-值参量的值必须为常量。

  • 'VariableNamingRule' 名称-值参量的值必须为常量。

  • 如果为输入表指定行名称,则行名称向量必须为常量。

sortrows

  • 输入参量 vars 必须为常量。

  • 如果 tblA 有一个变量是包含多列的字符向量元胞数组,则无法使用该变量中的值对表进行排序。

splitvars

  • 'NewVariableNames' 名称-值参量的值必须为常量。

  • 拆分的变量不能有可变的列数。

stack

  • 第二个输入参量 vars 必须为常量。

  • 'ConstantVariables''NewDataVariableName''IndexVariableName' 名称-值参量的值必须为常量。

unstack

  • 必须指定 'NewDataVariableNames' 名称-值参量。其值必须为常量。

  • varsivars 输入参量(数据变量和指示变量)必须为常量。

  • 如果指定分组变量和常变量,则它们必须为常量。

  • 如果指定聚合函数,则它必须为常量。

  • 如果输入表的一个变量是字符向量元胞数组,则 unstack 在生成的代码中用 1×0 字符数组填充对应输出变量中的空元胞。在 MATLAB 中,unstack 用 0×0 字符数组来填充这些空缺。

  • 当输入表中有一个变量是异构元胞数组且它无法转换为同构元胞数组时,unstack 函数不支持生成代码。

    • 如果输入有一个变量是同构元胞数组或可以转换为同构元胞数组,则必须指定 'AggregationFunction' 名称-值参量。'AggregationFunction' 的默认值为 'unique'。但是,unique 函数不支持元胞数组。

varfun

  • 函数句柄输入 func 必须为常量。

  • 虽然函数句柄可以是 varfun 本身的输入,但它们不能是您的入口函数的输入。请在用于代码生成的代码中指定 func。有关详细信息,请参阅代码生成的函数句柄限制 (MATLAB Coder)

  • 所有名称-值参量的值必须为常量。

  • 代码生成不支持 'ErrorHandler' 名称-值参量。

  • 不支持可变大小的输入参量。

  • 在生成的代码中,分组变量不能有重复值。

  • 如果指定 'OutputFormat' 名称-值参量,并且函数为 'cell' 指定的每个变量返回不同的数据类型,则不能将 'GroupingVariables' 的值指定为 'InputVariables'

  • 如果您指定组但在编译时组的数量未知,并且该数量为零,则输出中的空双精度变量在生成的代码中的大小可能为 1×0。在 MATLAB 中,此类变量的大小为 0×0。

另请参阅

| | |

主题