MATLAB Coder:截断/连接元胞数组
Posted
技术标签:
【中文标题】MATLAB Coder:截断/连接元胞数组【英文标题】:MATLAB Coder: Truncating/concatenating cell arrays 【发布时间】:2019-11-04 07:30:25 【问题描述】:我正在尝试从 MATLAB 函数生成 C 代码。我必须使用元胞数组(我无法更改它)并且出现了两个问题:
1:我想截断一个单元格数组,即
arr = cell(1,n);
% ...
arr = arr(1:m); % with m<n
MATLAB Coder 禁止(...)
索引,所以我尝试了以下
tmp = arr;
arr = cell(1,m);
for i = 1:m
arri = tmpi;
end
但这会引发错误,即“Matlab 无法确定 tmp: 的每个元素都在此行之前分配”。如果我在循环中将arr
的每个元素分配给tmp
,也会发生同样的情况。
-
当我尝试连接两个元胞数组时会出现同样的问题。
你知道如何解决这个问题,这样 MATLAB Coder 就不会抛出任何错误。
【问题讨论】:
有趣的是它不会承认tmp = arr;
是一个副本......也许核心器有时会使用一个指针并且它在这里感到困惑。你能在复制之前用tmp=cell(1,n);
初始化temp吗?甚至可能为tmp = arr;
制作一个循环,而不是单行
我尝试通过循环将arr
复制到tmp
,但给出了相同的错误消息。
包括我建议的初始化?
是的,正是……
【参考方案1】:
根据您使用的 MATLAB Coder 版本,您可能会收到此错误。 为了避免完整的分配检测问题,您可以键入:
arr = coder.nullcopy(cell(1,m));
但是您需要保证在分配之后您会写入每个单元格元素(您正在这样做,因为
for i = 1:m
arri = tmpi;
end
【讨论】:
【参考方案2】:您可以使用嵌入的花括号来做到这一点。
arr_trunc = arr1:m
我希望这会有所帮助。我用 Coder 对此进行了测试,没有出现错误。
【讨论】:
以上是关于MATLAB Coder:截断/连接元胞数组的主要内容,如果未能解决你的问题,请参考以下文章