Pad with Nan according to maximum row in cell

19 views (last 30 days)
Hi, I have a 1 x 8 cell (attached) and would like to cell2mat this matrix i.e to expand and show into one big numeric 97 x 8 array (97 being the maximum length of a cell array). I would also like to pad the ends of the smaller cell arrays with Nan to make all columns the same row length. How may I write for this?
Thank you!
  1 Comment
Stephen23
Stephen23 on 3 Mar 2023
Edited: Stephen23 on 3 Mar 2023
"How may I write for this?"
Rather than reinventing the wheel, you can simply download Jos' excellent PADCAT here:
and use it like this, where C is your cell array:
M = padcat(C{:})
This works automatically for vectors in either orientation.

Sign in to comment.

Accepted Answer

Fabio Freschi
Fabio Freschi on 27 Oct 2019
I keep all steps separated
% the data
A = {rand(47,1),rand(80,1),rand(97,1)};
% pad with NaNs
A = cellfun(@(x)[x(1:end); NaN(97-length(x),1)],A,'UniformOutput',false);
% make a matrix
A = cell2mat(A);
  3 Comments
Fabio Freschi
Fabio Freschi on 2 Mar 2023
Joanne,
if I understand correctly your question, you must simply change everything that is row into column and vice versa
% the data
A = {rand(1,47);rand(1,80);rand(1,97)}; % <- note the semicolon, note the row/col excange in the data
% pad with NaNs
A = cellfun(@(x)[x(1:end) NaN(1,97-length(x))],A,'UniformOutput',false); % <- note the missing semicolon after x(1:end) and the row/col excange in NaN
% make a matrix
A = cell2mat(A);
Hope iot helps
Tobias
Tobias on 14 Mar 2023
Hi! Thank you for your answer, unfortunately i appears that for cells < max_t the function just adds another cell arrayto the end of it, with max_t size. Do you know how to circumvent this ?

Sign in to comment.

More Answers (0)

Categories

Find more on Data Type Conversion in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!