MATLAB Coder: усечение / объединение ячеек - PullRequest
1 голос
/ 21 июня 2019

Я пытаюсь сгенерировать C-код из функции MATLAB. Я должен работать с массивами ячеек (я не могу изменить это), и возникают две проблемы:

1: я хочу обрезать массив ячеек, т.е.

arr = cell(1,n); 
% ...
arr = arr(1:m);   % with m<n

MATLAB Coder запрещает индексирование (...), поэтому я попробовал следующее

tmp = arr;
arr = cell(1,m);
for i = 1:m
    arr{i} = tmp{i};
end

Но это приведет к ошибке: «Matlab не может определить, что каждый элемент tmp {:} назначен перед этой строкой». То же самое происходит, если я назначаю каждый элемент от arr до tmp в цикле.

  1. Та же проблема возникает, когда я пытаюсь объединить два массива ячеек.

Знаете ли вы, как это исправить, чтобы MATLAB Coder не выдавал никаких ошибок.

1 Ответ

0 голосов
/ 24 июня 2019

В зависимости от того, какую версию MATLAB Coder вы используете, вы можете получить эту ошибку.Чтобы избежать полной проблемы с определением назначения, вы можете набрать:

arr = coder.nullcopy(cell(1,m));

Но вам нужно пообещать, что вы пишете в каждый элемент ячейки после этого назначения (что вы делаете, потому что

for i = 1:m
    arr{i} = tmp{i};
end
...