shifting of matrix elements

hi,Can i divide the matrix into layers ,outer layer(boundary elements)then second layer and so on.
for example
original matrix is
1 2 3 4 5 6 7 8
9 10 11 12 13 14 15 16
17 18 19 20 21 22 23 24
25 26 27 28 29 30 31 32
33 34 35 36 37 38 39 40
41 42 43 44 45 46 47 48
49 50 51 52 53 54 55 56
57 58 59 60 61 62 63 64
After one bit right shift of outside boundary and inside layers (its like contour)
9 1 2 3 4 5 6 7
17 18 10 11 12 13 14 8
25 26 27 19 20 21 15 16
33 34 35 36 28 22 23 24
41 42 43 37 29 30 31 32
49 50 44 45 46 38 39 40
57 51 52 53 54 55 47 48
58 59 60 61 62 63 64 56

 Accepted Answer

Not sure if there is an easier way, but this does it for you.
function M=matShift(M)
x=size(M,1);
for k=1:floor(x/2)
z=x-2*(k-1)-1;
y=circshift([M(k,k:end-k),M(k:end-k,end-k+1)',M(end-k+1,end-k+1:-1:k+1),M(end-k+1:-1:k+1,k)'],1);
M(k,k:end-k)=y(1:z);
M(k:end-k,end-k+1)=y(z+1:2*z);
M(end-k+1,end-k+1:-1:k+1)=y(2*z+1:3*z);
M(end-k+1:-1:k+1,k)=y(3*z+1:4*z);
end

4 Comments

It works .Thank you so much
so how to get the original matrix back
Just assign to a different variable at beginning
m=M;

Sign in to comment.

More Answers (0)

Categories

Find more on Language Fundamentals 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!