Transfer a matrix in a quick way

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

a = kron(1:3,ones(4,3))
out = reshape(permute(reshape(a,size(a,1),3,[]),[1 3 2]),[],3)

Sign in to comment.

 Accepted Answer

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)

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

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.
true, in this case im assuming a=a :)

Sign in to comment.

Categories

Asked:

on 30 May 2012

Community Treasure Hunt

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

Start Hunting!