How to unnest nested cell arrays??
40 次查看(过去 30 天)
显示 更早的评论
Dear all,
I have nested cell array as shown in the attached picture. I wanted to convert it into a Matrix but that doesn't work so easily using cell2mat. So I thought I could try to make them all the same size then I could open them up with cell2mat. To open them up I would take the length of my maximum array and add zeros to the rest of my arrays to have them the same size. I used this to do that:
maxLength = max(cellfun(@numel,A)); % A is the name of my cell array
out=(cellfun(@(x)cat(2,x,zeros(1,maxLength-length(x))),A,'UniformOutput',false)); %Filling the cells with zeros
But I don't get extra cells with zeros, instead I am getting one cell that is holding all the zeros, I have attached a picture of my result.
So my question is, what am I doing wrong? Or is there a different approach of turning my nested cell arrays into a matrix??
Thank You
1 个评论
采纳的回答
Cedric
2017-10-14
编辑:Cedric
2017-10-14
It is a very good attempt. Here is an example that is almost what you did:
>> A = {{5,6}; {7}; {8,9,3}}
A =
3×1 cell array
{1×2 cell}
{1×1 cell}
{1×3 cell}
>> maxLength = max(cellfun(@numel,A));
>> result = cellfun( @(x) [cell2mat(x), zeros(1,maxLength-numel(x))], A, 'UniformOutput', false )
result =
3×1 cell array
{1×3 double}
{1×3 double}
{1×3 double}
>> result = vertcat( result{:} )
result =
5 6 0
7 0 0
8 9 3
You chose the other option to concatenate zeros to x which is a cell array, and you just forgot to convert the numeric array output'ed by ZEROS into a cell array with NUM2CELL.
The last operation develops result in a comma separated list of cells content (which are 1x3 numeric arrays given my approach), and concatenates it vertically.
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Data Type Conversion 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!