Reshape matrix by taking two consecutive rows every two rows
13 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Pascal Weller
am 23 Mär. 2021
Kommentiert: Pascal Weller
am 7 Apr. 2021
Hello everyone,
I have seen quite some questions here on the forum that are about matrix reshaping. However, for my particular problem I did not find an answer. So, here we are:
I have got a matrix that looks like
[1 1 1 1;
2 2 2 2;
3 3 3 3;
4 4 4 4;
5 5 5 5;
6 6 6 6;
7 7 7 7;
8 8 8 8]
Is it somehow possible to reshape it to
[1 1 1 1 3 3 3 3;
2 2 2 2 4 4 4 4;
5 5 5 5 7 7 7 7;
6 6 6 6 8 8 8 8]
with the built-in functions like reshape, permutate, flip,...?
There would always be the way with for loops but I thought it might be neater (and possibly faster) to do it with the built-in functions.
Thanks for your help.
0 Kommentare
Akzeptierte Antwort
Adam Danz
am 23 Mär. 2021
Bearbeitet: Adam Danz
am 7 Apr. 2021
x must be an n*m matrix where n is divisible of 4.
M is the reformatted matrix with size k*j where k=n/2 and j=m*2.
x = [1 1 1 1;
2 2 2 2;
3 3 3 3;
4 4 4 4;
5 5 5 5;
6 6 6 6;
7 7 7 7;
8 8 8 8];
rowIdx = [1 3 2 4]' + [0:4:size(x,1)-1];
M = reshape(x(rowIdx(:),:)', size(x,2)*2, [])'
Another example,
x = [1 1 1 1;
2 2 2 2;
3 3 3 3;
4 4 4 4;
5 5 5 5;
6 6 6 6;
7 7 7 7;
8 8 8 8
9 9 9 9
10 10 10 10
11 11 11 11
12 12 12 12];
rowIdx = [1 3 2 4]' + [0:4:size(x,1)-1];
M = reshape(x(rowIdx(:),:)', size(x,2)*2, [])'
To get from M back to x,
k = reshape(M',size(M,2)/2,[]);
rowIdx = [1 3 2 4]' + (0:4:size(k,2)-1);
xOrig = k(:,rowIdx(:))';
4 Kommentare
Weitere Antworten (1)
Taimoor Hasan Khan
am 23 Mär. 2021
A = [1 1 1 1;
2 2 2 2;
3 3 3 3;
4 4 4 4;
5 5 5 5;
6 6 6 6;
7 7 7 7;
8 8 8 8];
A = cat( 2, [ A(1:2, :); A(5:6, :) ], [ A(3:4, :); A(7:8, :) ] )
% vertical concat. #1 % vertical concat #2
Not sure how you could generalize the process without loops though, sorry...
Siehe auch
Kategorien
Mehr zu Logical 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!