howto organize an array into groups of n-Elements

6 ビュー (過去 30 日間)
William Collants
William Collants 2020 年 5 月 24 日
コメント済み: William Collants 2020 年 5 月 26 日
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.

採用された回答

James Tursa
James Tursa 2020 年 5 月 24 日
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 件のコメント
Tommy
Tommy 2020 年 5 月 25 日
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 2020 年 5 月 26 日
That did the trick, thank you both most kindly. Love this Community <3

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeResizing and Reshaping Matrices についてさらに検索

製品


リリース

R2018b

Community Treasure Hunt

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

Start Hunting!

Translated by