解决错误:大小不匹配
问题
当数组大小不兼容或隐式扩展不可用时,代码生成器会产生大小不匹配错误。
MATLAB® 中的大多数二元运算符和函数以及生成的代码都支持大小兼容的数值数组。对于每个维度,如果两个输入的大小相同或其中一个为 1
,则这些输入将具有兼容的大小。以最简单的情况为例,如果两个数组大小完全相同或其中一个为标量,则这两个数组大小是兼容的。例如:
magic(4) + ones(4,1); % where magic(4) = ones(4,1) = % 16 2 3 13 1 % 5 11 10 8 1 % 9 7 6 12 1 % 4 14 15 1 1
ans = 17 3 4 14 6 12 11 9 10 8 7 13 5 15 16 2
第二个数组会隐式扩展以匹配第一个矩阵的维度。有关详细信息,请参阅基本运算的兼容数组大小。
在对兼容大小的数组执行二元运算时,如果满足以下任一条件,隐式扩展便可能会不可用:
您的函数作用域包括
coder.noImplicitExpansionInFunction
函数。您使用
coder.sameSizeBinaryOp
函数来执行二元运算。您关闭工程的隐式扩展。
隐式扩展的大小不匹配或不可用会生成以下错误:
%Size mismatch between two arrays Size mismatch (size [10][1] ~= size [1][10])
当结构体字段和元胞元素满足上述条件时,代码生成器将分别生成以下错误:
%Size mismatch in structure fields Size mismatch (size [10][1] ~= size [1][10]) in field StructField %Size mismatch in cell elements Size mismatch (size [10][1] ~= size [1][10]) in element cellElement.
可能的解决方案
验证在支持隐式扩展的二元运算中,运算是否在函数作用域内。检查是否存在以下情况:
数组大小不兼容。
在调用
coder.noImplicitExpansionInFunction
的函数的作用域内进行二元运算。coder.sameSizeBinaryOp
不隐式扩展其操作数或支持标量扩展。如果您关闭了整个工程的隐式扩展,所有需要隐式扩展的运算都会生成错误。
对兼容大小的数组执行二元运算
如果必须对不同大小的数组执行二元运算,请确保数组的大小兼容,并且在函数作用域内启用了隐式扩展。请参阅基本运算的兼容数组大小。
在没有 coder.noImplicitExpansionInFunction
的情况下调用二元运算
如果必须在您的函数中包含 coder.noImplicitExpansionInFunction
,请在另一个启用隐式扩展的函数中调用所需的二元运算。
在没有 coder.sameSizeBinaryOp
的情况下调用二元运算
如果不希望对特定运算启用隐式扩展,请提供与 coder.sameSizeBinaryOp
大小相同的输入参量。coder.sameSizeBinaryOp
不允许标量扩展,如果输入参量的大小不同,则会生成错误。
对工程启用隐式扩展
如果启用隐式扩展不影响您的工程,请考虑通过将代码配置对象中的 EnableImplicitExpansion
属性设置为 true
来启用隐式扩展。
如果您需要对特定运算启用隐式扩展,请考虑使用 coder.sameSizeBinaryOp
或 coder.noImplicitExpansionInFunction
来防止其他运算发生隐式扩展。请参阅Optimize Implicit Expansion in Generated Code。
另请参阅
coder.noImplicitExpansionInFunction
| coder.sameSizeBinaryOp