howto organize an array into groups of n-Elements

43 views (last 30 days)
Let's say I have a Vector of length 100
x = 1:100
and want to reshape that Vector into a 5x20 Matrix. 20 Columns with 5 Elements per Column.
a = reshape (x,5,20)
There are, then, 4 Variations of this. Starting at the 1st, 2nd, 3rd, or 4th Element.
I can group Elements 1-5 into the 1st Column, Elements 6-10 into the 2nd Column, etc.
circshift (x, -1)
b = reshape (x,5,20)
But I can also group Elements 2-6 into the 1st, 7-11 into the next, etc. The last column containing the 4 last Elements of the Vector, plus the first.
circshift (x, -2)
c = reshape (x,5,20)
I can also group Elements 3-7, 8-12, last column containing the 3 last Elements and the first 2.
circshift (x, -3)
d = reshape (x,5,20)
Then lastly 4-8, 9-13 etc.
circshift (x, -4)
e = reshape (x,5,20)
As the Order of the Columns (or Order of the Elements in the Columns) doesn't matter, circshift (x, +-5) has the same information than the original Vector x.
Is there a more Elegant Solution than circshift-ing the Vector (x) 4 times separately, and reshaping it into a matrix 4 times separately? Some function which produces from this Vector x the 4 Matrices a, b, c & d ?
I can't think of a proper title for this question, which really bugs me. Feel free to offer a suggestion.

Accepted Answer

James Tursa
James Tursa on 24 May 2020
Another way:
x = 1:100;
a = reshape (x,5,20);
aa = [a;a];
v = cell(1,5);
for k=1:5
v{k} = aa(k:k+4,:);
end
Then the v{k} are your variables.
  3 Comments
Tommy
Tommy on 25 May 2020
How about with this slight edit?
x = 1:100;
a = reshape (x,5,20);
aa = [a;circshift(a,-1,2)];
v = cell(1,5);
for k=1:5
v{k} = aa(k:k+4,:);
end
William Collants
William Collants on 26 May 2020
That did the trick, thank you both most kindly. Love this Community <3

Sign in to comment.

More Answers (0)

Categories

Find more on Resizing and Reshaping Matrices in Help Center and File Exchange

Products


Release

R2018b

Community Treasure Hunt

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

Start Hunting!