Transfer a matrix in a quick way
    6 views (last 30 days)
  
       Show older comments
    
a matrix' size is 4*300 i want to transfor it to 400*3
the method is
FROM
a a a b b b c c c ……(300 column)
a a a b b b c c c ……(300 column)
a a a b b b c c c ……(300 column )
a a a b b b c c c ……(300column )
TO
a a a
a a a
a a a
a a a
b b b
b b b
b b b
b b b
c c c
c c c
c c c
c c c
…… 400 ROW
it just changes some data's position . i need a quick way to do it , Thanks!!! --
1 Comment
  Andrei Bobrov
      
      
 on 30 May 2012
				a = kron(1:3,ones(4,3))
out = reshape(permute(reshape(a,size(a,1),3,[]),[1 3 2]),[],3)
Accepted Answer
  Geoff
      
 on 30 May 2012
        If you want to preserve each 4x3 block, you could try something like this:
B = reshape(A(:, [1:3:end, 2:3:end, 3:3:end]), [], 3 );
More Answers (1)
  Thomas
      
 on 30 May 2012
        You can use reshape
 doc reshape
Eg.
a={'a' 'a' 'a' 'b' 'b' 'b' 'c' 'c' 'c';'a' 'a' 'a' 'b' 'b' 'b' 'c' 'c' 'c';
'a' 'a' 'a' 'b' 'b' 'b' 'c' 'c' 'c';'a' 'a' 'a' 'b' 'b' 'b' 'c' 'c' 'c'}
out=reshape(a,3,[])'
 out=
    'a'    'a'    'a'
    'a'    'a'    'a'
    'a'    'a'    'a'
    'a'    'a'    'a'
    'b'    'b'    'b'
    'b'    'b'    'b'
    'b'    'b'    'b'
    'b'    'b'    'b'
    'c'    'c'    'c'
    'c'    'c'    'c'
    'c'    'c'    'c'
    'c'    'c'    'c'
2 Comments
  Geoff
      
 on 30 May 2012
				I have a feeling that those blocks of 'a', 'b' etc are supposed to maintain the same relative position in the output matrix. Reshape will scramble the order in this case. I think the poster wants to reorganise blocks of 4x3 data into a vertical stack.
See Also
Categories
				Find more on Matrices and Arrays in Help Center and File Exchange
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!


