How to avoid cell2mat while reshaping cell arrays

3 ビュー (過去 30 日間)
wave_buoys
wave_buoys 2019 年 5 月 2 日
コメント済み: wave_buoys 2019 年 5 月 2 日
Hi,
I have 1 x 2 cell: 55430 x 2350 and 55430 x 2200 elements
Try to avoid using cell2mat, is there any another way to reshape this 1x2 cell to get: 1 x 55430 cell: 1 x 4550 elements (4550 = 2350 + 2200);
Thank you

採用された回答

Stephen23
Stephen23 2019 年 5 月 2 日
編集済み: Stephen23 2019 年 5 月 2 日
Simple way using concatenation:
C = {rand(55430,2350),rand(55430,2200)}; % fake data
D = num2cell(horzcat(C{:}),2);
But I guess you are trying to avoid some "out of memory" errors, in which case loops might help:
N = numel(C);
R = size(C{1},1);
D = cell(1,R);
for ii = 1:R
T = cell(1,N);
for jj = 1:N
T{jj} = C{jj}(ii,:);
end
D{ii} = [T{:}];
end
Giving:
>> size(D)
ans =
1 55430
>> size(D{1})
ans =
1 4550
>> size(D{end})
ans =
1 4550
  1 件のコメント
wave_buoys
wave_buoys 2019 年 5 月 2 日
Wonderful ! This is what I want! Indeed, I try to avoid cell2mat that is related to "out of memory" errors
Thank you so much!

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

その他の回答 (1 件)

KSSV
KSSV 2019 年 5 月 2 日
C{1} = rand(55430,2350) ;
C{2} = rand(55430,2200) ;
C1 = num2cell([C{1}(:,1) C{2}(:,1)],2) ;
C2 = num2cell([C{1}(:,2:end) C{2}(:,2:end)],2) ;
  1 件のコメント
Stephen23
Stephen23 2019 年 5 月 2 日
wave_buoys's "Answer" moved here:
Hi, thanks for a quick answer,
this could a solution, but I was expecting a better approach via 'for' loop, so that I can apply for 1 x n cell.
Could you?

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

カテゴリ

Help Center および File ExchangeMultidimensional Arrays についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by