how rearrange data in a matrix?
    2 views (last 30 days)
  
       Show older comments
    
I have a data as:
 data=[1 2 3 4 5 6 7 8];
I need a new data matrix (4 x 8),like this:
 new_data =[ 1 2 0 0 0 0 0 0
             0 0 3 4 0 0 0 0
             0 0 0 0 5 6 0 0
             0 0 0 0 0 0 7 8 ]
How to do it using a FOR loop ? Any help?
0 Comments
Accepted Answer
  Azzi Abdelmalek
      
      
 on 19 Oct 2013
        
      Edited: Azzi Abdelmalek
      
      
 on 19 Oct 2013
  
      data=[1 2 3 4 5 6 7 8];
n=numel(data);
R=zeros(n/2,n);
R(:,1:2)=reshape(data,2,[])';
out=cell2mat(arrayfun(@(x) circshift(R(x+1,:),[ 0 2*x]),(0:3)','un',0))
%or
data=[1 2 3 4 5 6 7 8];
n=numel(data);
out=zeros(n/2,n);
out(sub2ind(size(out),repmat((1:n/2),2,1),reshape(1:n,2,[])))=data
%or
EDIT
n=numel(data);
a=[reshape(data,2,[]) ;zeros(n,n/2)];
a=a(:);
a(end-n+1:end)=[];
out=reshape(a,n,n/2)'
More Answers (1)
  Andrei Bobrov
      
      
 on 19 Oct 2013
        
      Edited: Andrei Bobrov
      
      
 on 20 Oct 2013
  
      a = num2cell(reshape(data,1,2,[]),[1 2])
out = blkdiag(a{:});
or
out = kron(eye(4),[1 1])*diag(data);
or
out = reshape(permute(repmat(eye(4),[1,1,2]),[1 3 2]),4,[])*diag(data);
2 Comments
See Also
Categories
				Find more on Loops and Conditional Statements in Help Center and File Exchange
			
	Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!

