How to concatenate cells within cells

1 Ansicht (letzte 30 Tage)
Keegan Sim
Keegan Sim am 12 Mai 2023
Bearbeitet: Stephen23 am 12 Mai 2023
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?

Akzeptierte Antwort

Stephen23
Stephen23 am 12 Mai 2023
Bearbeitet: Stephen23 am 12 Mai 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 Kommentare
Keegan Sim
Keegan Sim am 12 Mai 2023
How would you store X,Y, Z and perform this operation using numeric arrays?
Stephen23
Stephen23 am 12 Mai 2023
Bearbeitet: Stephen23 am 12 Mai 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

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Mehr zu Matrices and Arrays finden Sie in Help Center und File Exchange

Produkte


Version

R2020a

Community Treasure Hunt

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

Start Hunting!

Translated by