Pad with Nan according to maximum row in cell

33 次查看(过去 30 天)
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 个评论
Stephen23
Stephen23 2023-3-3
编辑:Stephen23 2023-3-3
"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.

请先登录,再进行评论。

采纳的回答

Fabio Freschi
Fabio Freschi 2019-10-27
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 个评论
Fabio Freschi
Fabio Freschi 2023-3-2
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 2023-3-14
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 ?

请先登录,再进行评论。

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Data Type Conversion 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by