how rearrange data in a matrix?
    2 Ansichten (letzte 30 Tage)
  
       Ältere Kommentare anzeigen
    
    Ved
 am 19 Okt. 2013
  
    
    
    
    
    Kommentiert: Andrei Bobrov
      
      
 am 20 Okt. 2013
            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 Kommentare
Akzeptierte Antwort
  Azzi Abdelmalek
      
      
 am 19 Okt. 2013
        
      Bearbeitet: Azzi Abdelmalek
      
      
 am 19 Okt. 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)'
Weitere Antworten (1)
  Andrei Bobrov
      
      
 am 19 Okt. 2013
        
      Bearbeitet: Andrei Bobrov
      
      
 am 20 Okt. 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 Kommentare
Siehe auch
Kategorien
				Mehr zu Loops and Conditional Statements finden Sie in Help Center und File Exchange
			
	Produkte
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!


