How to transform a cell array of cells in a matrix

Problem: I have a cell array and every cell of this array has an other cell that contains a string: I want to trasform the cell array in a matrix of strings. How can i do? I have tried to use cell2mat but matlab gives an error:
'Cannot support cell arrays containing cell arrays or objects.'
I have A, in the attached .mat file, which is a vector of strings, and I want to divide prefix to postfix. To do it I use this code :
for k=1:25
[matches(:,k), postfix(:,k)] = regexp(A,sprintf('%d%d(.*)',digits{1}(k),digits{2}(k)),'match','once','tokens');
end
This code creates postfix (attached matlab.mat). I want that postfix is a matrix, and I don't know how transform it.

1 Comment

The cell array in your ‘matlab.mat’ file seems to be 93% empty, and at least some of the non-empty cells contain only ''.

Sign in to comment.

Answers (2)

Extract it first, then use cell2mat:
for k = 1 : length(ca)
thisCellContents = ca{k}; % thisCellContents is another cell - the cell inside this cell.
matrix = cell2mat(thisCellContents);
end
Adapt as needed, for example if it's a 2D array of cells or whatever.

3 Comments

This solution give me an empty matrix but I want to save the value of the cell array in the matrix
What did thisCellContents produce? Was there anything in it? Star Strider says your mat file is empty everywhere.
the matlab.mat file is not empty everywhere: if you control, it isn't while thisCellContents is empty.
Star Strider:
The cell array in your ‘matlab.mat’ file seems to be 93% empty, and at least some of the non-empty cells contain only ''.

Sign in to comment.

>> X = {{'A'},{'bb'};{'CCC'},{'d'}}
X =
{1x1 cell} {1x1 cell}
{1x1 cell} {1x1 cell}
>> Y = reshape([X{:}],size(X))
Y =
'A' 'bb'
'CCC' 'd'

6 Comments

I have attached the cell array! I try your code @Stephen Cobeldick but it generates an error
'Error using reshape
To RESHAPE the number of elements must not change.'
Your cell array is not how you have described it, because the cells contain many empty arrays. When you replace the empty arrays with cells of strings (thus matching your original description), then my code works without error:
>> postfix(cellfun(@isempty,postfix)) = {''};
>> Y = reshape([postfix{:}],size(postfix));
I have tried your code but it continues to give me an error: 'Error using reshape To RESHAPE the number of elements must not change.'
Seems doubtful since the size after reshaping is size(postfix) which is the same size as before reshaping.
ely, why are you not showing us your code??? What's the big secret? Don't you want to make it easy for use to help you, not hard? Or have you not read this link yet?
I have no secret! Now I post my code (I think it wasn't necessary). I add it in the question. Sorry but I think that the question was clear.
Well it was necessary because we can now see that your code doesn't look like Stephen's code. Sorry, I have to leave for work now and I don't have time now to fix your code.

Sign in to comment.

Categories

Asked:

on 30 Nov 2015

Edited:

on 1 Dec 2015

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!