shifting of matrix elements

4 vues (au cours des 30 derniers jours)
sadiqa ilyas
sadiqa ilyas le 29 Fév 2020
Commenté : sadiqa ilyas le 1 Mar 2020
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

Réponse acceptée

David Hill
David Hill le 29 Fév 2020
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 commentaires
David Hill
David Hill le 29 Fév 2020
Just assign to a different variable at beginning
m=M;
sadiqa ilyas
sadiqa ilyas le 1 Mar 2020
thanks

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur Matrices and Arrays dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by