Matlab矩阵计数器旋转元素

时间:2014-05-08 10:00:01

标签: matlab matrix rotation shift

您好我想创建一个函数,它将所有元素逆时针旋转一个方阵的一个位置。

[  1  2  3  4;
   5  6  7  8; 
   9 10 11 12; 
  13 14 15 16]

将成为:

[ 2  3  4  8; 
  1  7 11 12; 
  5  6 10 16;
  9 13 14 15]

这是我的尝试:

size_mat = size(A,1)
B=zeros(size_mat);
loops = fix(size_mat/2)

if mod(size_mat,2) ~= 0
   B(loops+1,loops+1)= A(loops+1,loops+1) 
end

for i=1:loops,
    B(i+1,i)=A(i,i);
       for j=i:(size_mat-i)
           B(i,j)=A(i,j+1); 
           B(j,size_mat+1-i)=A(j+1,size_mat+1-i); 
           B(size_mat+1-i,size_mat+1-j)=A(size_mat+1-i,size_mat-j); 

           if((j+2)<=size_mat)
               B(size_mat+1-j,i)=A(size_mat-j,i); 
           end  
       end
end

我可以做得更好吗?

1 个答案:

答案 0 :(得分:1)

<强>代码

%%// A is the input matrix

N = size(A,1)
sz = ceil(N/2)

quad4 = ones(sz)
quad1 = quad4

quad1(logical(fliplr(triu(ones(sz),1))))=N
quad4(logical(tril(quad4)))=-N
quad14 = [quad1;quad4]
quad = [-1*rot90(quad14,2) quad14]

if rem(N,2)==1
    quad(:,sz)=[]
    quad(sz,:)=[]
    quad(sz,sz)=0
end
rotatedA = A(reshape(1:numel(A),size(A))+quad) %%// rotated output matrix