howto organize an array into groups of n-Elements

40 Ansichten (letzte 30 Tage)
William Collants
William Collants am 24 Mai 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.

Akzeptierte Antwort

James Tursa
James Tursa am 24 Mai 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 Kommentare
Tommy
Tommy am 25 Mai 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 am 26 Mai 2020
That did the trick, thank you both most kindly. Love this Community <3

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

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

Produkte


Version

R2018b

Community Treasure Hunt

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

Start Hunting!

Translated by