Create a Matrix from different ccella array.

1 view (last 30 days)
I have a cell array "data" 1x3 cell, each cell having different number of elements with 4 columns. for example data= [13252*4 double];[1516*4] double;[1244*4]double.
Now, I need a matrix which has maximum number of columns equal to 12 (sum of single columns) and rows equal to the maximum number of columns of all the cells. and I want to insert Nan when there is not value.
Thank you so much!!!
  1 Comment
Fredic on 24 Jul 2020
I try this code
nCol = cellfun('size', data,1);
nRow = numel(data) ;
Output = NaN(max(nCol), nRow);
for iA = 1:numel(data)
idx = (iA - 1) + 1;
Output(1:nCol(iA), idx:idx+1) = data{iA};
But then appers this error
Unable to perform
assignment because the
size of the left side is
1352-by-2 and the size of
the right side is
Error in Fitting_function
(line 44)
idx:idx+1) = data{iA};

Sign in to comment.

Accepted Answer

KSSV on 24 Jul 2020
A{1} = rand(10,4) ;
A{2} = rand(5,4) ;
A{3} = rand(6,4) ;
% Get length of each cell
L = cellfun(@length,A) ;
for i = 1:length(L)
if size(A{i},1) < max(L)
T = NaN(max(L),4) ;
T(1:L(i),:) = A{i} ;
A{i} = T ;
iwant = [A{:}] ;

More Answers (1)

madhan ravi
madhan ravi on 24 Jul 2020
Edited: madhan ravi on 24 Jul 2020
m = cellfun(@size, data, 'un', 0);
M = max(cat(1, m{:}));
Data = cellfun(@(x) [x; nan(M(1) - size(x, 1), M(2))], data, 'un', 0)

Sign in to comment.


Community Treasure Hunt

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

Start Hunting!