您好我想创建一个函数,它将所有元素逆时针旋转一个方阵的一个位置。
[ 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
我可以做得更好吗?
答案 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