Simple reformat data question

조회 수: 7 (최근 30일)
Rahul
Rahul 2012년 4월 5일
I have
a=[1:16]
and I need to get
b= 1 2 4 3
5 6 8 7
13 14 16 15
9 10 12 11
have a number of such vectors that I want to convert into this format..

채택된 답변

Thomas
Thomas 2012년 4월 5일
There might be a shorter way of doing this but this is a start..
a=[1:16]
b=reshape(a,4,[])'
c=b(:,3)
b(:,3)=[]
b=[b c]
d=b(3,:)
b(3,:)=[]
b=[b;d]
  댓글 수: 1
Rahul
Rahul 2012년 4월 5일
trying your solution.. thanks..

댓글을 달려면 로그인하십시오.

추가 답변 (2개)

Sean de Wolski
Sean de Wolski 2012년 4월 5일
If you can explain what's going on we might be able to help you with a more general solution. Otherwise, there doesn't appear to be a pattern and the solution is thus:
b = a([1 2 4 3; 5 6 8 7; 13 14 16 15;9 10 12 11])
More per comments
A=reshape(1:16,4,4)'
B = A;
B([end-1 end],:) = B([end end-1],:);
B(:,[end-1 end]) = B(:,[end end-1]);
  댓글 수: 2
Rahul
Rahul 2012년 4월 5일
I have to exchange the last and second last row and last and second last column. This is ok for the example matrix, but I have a number of such vectors that I need to reformat.. I'm trying the above solution by Thomas..
Sean de Wolski
Sean de Wolski 2012년 4월 5일
see update

댓글을 달려면 로그인하십시오.


Matt Tearle
Matt Tearle 2012년 4월 5일
How much does this need to generalize? If a might be very long, using a transpose is inefficient. Will the number of elements of a be fixed? If not, will the number of elements of a always be a square (so it can be reshaped into an n-by-n matrix)?
If numel(a) can be large, but will always be square:
A = 1:49; % or whatever
n2 = length(A);
n = sqrt(n2);
idx = mod(0:n:(n*n2-1),n2-1)+1;
B = reshape(A(idx),n,n);
B(n,n) = n2;
B([end-1 end],:) = B([end end-1],:);
B(:,[end-1 end]) = B(:,[end end-1]);

카테고리

Help CenterFile Exchange에서 MATLAB에 대해 자세히 알아보기

태그

제품

Community Treasure Hunt

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

Start Hunting!

Translated by