Kapa11
Kapa11

Reputation: 303

MATLAB Coder: Truncating/concatenating cell arrays

I'm trying to generate C-Code from a MATLAB function. I have to work with cell arrays (I cannot change this) and there are occurring two problems:

1: I want to truncate a cell array, i.e.

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

MATLAB Coder forbids the (...) indexing, so I tried the following

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

But this will throw the error, that 'Matlab is unable to determine that every element of tmp{:} is assigned before this line'. The same happens if I assign every element of arr to tmp in a loop.

  1. The same problem occurs when I try to concatenate two cell arrays.

Do you know how to fix this, so that MATLAB Coder won't throw any errors.

Upvotes: 3

Views: 393

Answers (2)

Michael
Michael

Reputation: 15

You can do this with embedded curly braces.

arr_trunc = {arr{1:m}}

I hope this helps. I tested this with Coder and didn't get an error.

Upvotes: 0

abottema
abottema

Reputation: 21

Depending on what version of MATLAB Coder you're using you can get this error. In order to avoid the complete assignment detection problem you can type:

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

But you need to promise you're writing to every cell element after that assignment (which you are doing, because

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

Upvotes: 2

Related Questions