How to concatenate cells within cells

1 view (last 30 days)
Say I have X={{1},{2},{3},{4}}, Y={{5},{6},{7;8},{9;10}}
I would like to have Z={{1;5},{2;6},{3;7;8},{4;9;10}},
that is, concatenate X over Y, both 1x4 cell arrays, into Z which is also a 1x4 cell array.
Is there a simple way to do this?

Accepted Answer

Stephen23
Stephen23 on 12 May 2023
Edited: Stephen23 on 12 May 2023
"Is there a simple way to do this?"
Yes, CELLFUN and VERTCAT:
X = {{1},{2},{3},{4}};
Y = {{5},{6},{7;8},{9;10}};
Z = cellfun(@vertcat,X,Y,'uni',0)
Z = 1×4 cell array
{2×1 cell} {2×1 cell} {3×1 cell} {3×1 cell}
Checking:
Z{:}
ans = 2×1 cell array
{[1]} {[5]}
ans = 2×1 cell array
{[2]} {[6]}
ans = 3×1 cell array
{[3]} {[7]} {[8]}
ans = 3×1 cell array
{[ 4]} {[ 9]} {[10]}
Note that storing numeric data in those nested cell arrays is not efficient data design. Simpler numeric arrays are intended for storing numeric data.
  2 Comments
Keegan Sim
Keegan Sim on 12 May 2023
How would you store X,Y, Z and perform this operation using numeric arrays?
Stephen23
Stephen23 on 12 May 2023
Edited: Stephen23 on 12 May 2023
"How would you store X,Y, Z and perform this operation using numeric arrays?"
Simply replace the inner nested cell arrays with basic numeric arrays:
X = {1,2,3,4};
Y = {5,6,[7;8],[9;10]};
Z = cellfun(@vertcat,X,Y,'uni',0)
Z = 1×4 cell array
{2×1 double} {2×1 double} {3×1 double} {3×1 double}
Checking:
Z{:}
ans = 2×1
1 5
ans = 2×1
2 6
ans = 3×1
3 7 8
ans = 3×1
4 9 10

Sign in to comment.

More Answers (0)

Categories

Find more on Matrices and Arrays in Help Center and File Exchange

Products


Release

R2020a

Community Treasure Hunt

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

Start Hunting!