How to avoid cell2mat while reshaping cell arrays

4 visualizzazioni (ultimi 30 giorni)
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

Risposta accettata

Stephen23
Stephen23 il 2 Mag 2019
Modificato: Stephen23 il 2 Mag 2019
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 Commento
wave_buoys
wave_buoys il 2 Mag 2019
Wonderful ! This is what I want! Indeed, I try to avoid cell2mat that is related to "out of memory" errors
Thank you so much!

Accedi per commentare.

Più risposte (1)

KSSV
KSSV il 2 Mag 2019
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 Commento
Stephen23
Stephen23 il 2 Mag 2019
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?

Accedi per commentare.

Categorie

Scopri di più su Multidimensional Arrays in Help Center e File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by