Reshape a row vector and convert it to a cell array

6 views (last 30 days)
I have a row vector as the following:
x = [1:10, 101:110, 11:20, 111:120]
Now I want to convert it to a 2-by-2 cell array C, where
C(1,1) = {[1:10]}
C(1,2) = {[11:20]}
C(2,1) = {[101:110]}
C(2,2) = {[111:120]}
How can I achieve this?

Answers (2)

Chunru
Chunru on 16 Nov 2021
x = [1:10, 101:110, 11:20, 111:120];
x = reshape(x, [20, 2])';
C = mat2cell(x, [1 1], [10 10])'
C = 2×2 cell array
{[ 1 2 3 4 5 6 7 8 9 10]} {[ 11 12 13 14 15 16 17 18 19 20]} {[101 102 103 104 105 106 107 108 109 110]} {[111 112 113 114 115 116 117 118 119 120]}

Image Analyst
Image Analyst on 16 Nov 2021
Why do you want to do that?? That kind of situation does not call for a slow and inefficient cell array. You could simply use a 2-D double array:
C = reshape(x, [], 10);
Cell arrays are used for situations like where the arrays in each cell are not all of the same size. See the FAQ:
  4 Comments
hmhuang
hmhuang on 16 Nov 2021
@Image Analyst May I ask how to make x = [1:10, 101:110, 11:20, 111:120] to be x = [1:10, 11:20; 101:110, 111:120] by using reshape or some MATLAB built-in function?
Image Analyst
Image Analyst on 16 Nov 2021
@hmhuang, for that, try this:
x = [1:10, 101:110, 11:20, 111:120];
C = reshape(x, 10, [])';
Codd = C(1:2:end,:);
Ceven = C(2:2:end,:);
Codd = reshape(Codd', 20, [])';
Ceven = reshape(Ceven', 20, [])';
x = [Codd; Ceven]
x = 2×20
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120
Why do you need to do this rearrangement anyway?

Sign in to comment.

Community Treasure Hunt

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

Start Hunting!