howto organize an array into groups of n-Elements
43 views (last 30 days)
Show older comments
William Collants
on 24 May 2020
Commented: William Collants
on 26 May 2020
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.
0 Comments
Accepted Answer
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
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
More Answers (0)
See Also
Categories
Find more on Resizing and Reshaping Matrices in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!