Trying to convert cell to array when cells have range of values

1 回表示 (過去 30 日間)
jfrazie9
jfrazie9 2018 年 5 月 11 日
コメント済み: Rik 2018 年 5 月 12 日
I have a 1x1000 cell that I am trying to convert to an array so I can easily copy out all the columns and rows of data. Unfortunately, in each cell there are doubles that vary in length (80x1 double, 81x1 double, 79x1 double) I tried cell2mat but since they are all different lengths that did not work.
What if any function may do what I am trying to do and fill in the void spaces with placeholders that are not 0?
Thank you in advance.

採用された回答

Rik
Rik 2018 年 5 月 11 日
This should do the trick. It assumes array indexing is possible.
a={[1 2 3]',[1 1]',[1 2 3 4 5 6]'};
maxlen=max(cellfun('length',a));
clc
a2=cellfun(@extend_to_maxlength,...
a,repmat({maxlen},size(a)),...
'UniformOutput',false);
a2=cell2mat(a2);
function x=extend_to_maxlength(x,maxlen)
if numel(x)<maxlen
x(maxlen)=0;
end
end

その他の回答 (1 件)

Ameer Hamza
Ameer Hamza 2018 年 5 月 11 日
編集済み: Ameer Hamza 2018 年 5 月 11 日
try this:
% creating test data
a{1} = 1:4;
a{2} = 1:5;
a{3} = 1:10;
% solution
maxElements = max(cellfun(@length, a)); % finding maximum length of appropriate padding of zeros
matrix = cellfun(@(x) [x(:);zeros(maxElements-length(x), 1)], a, 'UniformOutput', 0);
matrix = cell2mat(matrix);
  1 件のコメント
Rik
Rik 2018 年 5 月 12 日
Just an addition: cellfun('length',a) is faster than cellfun(@length,a)

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeData Type Conversion についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by