Filter löschen
Filter löschen

Reshape a row vector and convert it to a cell array

3 Ansichten (letzte 30 Tage)
hmhuang
hmhuang am 16 Nov. 2021
Kommentiert: Image Analyst am 16 Nov. 2021
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?

Antworten (2)

Chunru
Chunru am 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 am 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 Kommentare
hmhuang
hmhuang am 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 am 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?

Melden Sie sich an, um zu kommentieren.

Kategorien

Mehr zu MATLAB finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by