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:截断/连接元胞数组的主要内容,如果未能解决你的问题,请参考以下文章

Matlab怎么把元胞数组转化成矩阵

MATLAB将元胞数组中特定行列转换为矩阵

如何在 MATLAB 中连接元胞数组中的字符串,它们之间有空格?

Matlab保存忽略大单元格数组

matlab的cell语句

matlab怎样把cell函数转换为一般矩阵形式