Effacer les filtres
Effacer les filtres

How to avoid cell2mat while reshaping cell arrays

1 vue (au cours des 30 derniers jours)
wave_buoys
wave_buoys le 2 Mai 2019
Commenté : wave_buoys le 2 Mai 2019
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

Réponse acceptée

Stephen23
Stephen23 le 2 Mai 2019
Modifié(e) : Stephen23 le 2 Mai 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 commentaire
wave_buoys
wave_buoys le 2 Mai 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!

Connectez-vous pour commenter.

Plus de réponses (1)

KSSV
KSSV le 2 Mai 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 commentaire
Stephen23
Stephen23 le 2 Mai 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?

Connectez-vous pour commenter.

Catégories

En savoir plus sur Data Type Conversion dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by