Transfer a matrix in a quick way

1 visualizzazione (ultimi 30 giorni)
yu xu il 30 Mag 2012
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 CommentoMostra -1 commenti meno recentiNascondi -1 commenti meno recenti
Andrei Bobrov il 30 Mag 2012
a = kron(1:3,ones(4,3))
out = reshape(permute(reshape(a,size(a,1),3,[]),[1 3 2]),[],3)

Accedi per commentare.

Risposta accettata

Geoff il 30 Mag 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 );
1 CommentoMostra -1 commenti meno recentiNascondi -1 commenti meno recenti
yu xu il 30 Mag 2012
thank you very much.

Accedi per commentare.

Più risposte (1)

Thomas il 30 Mag 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 CommentiMostra NessunoNascondi Nessuno
Geoff il 30 Mag 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.
Thomas il 30 Mag 2012
true, in this case im assuming a=a :)

Accedi per commentare.

Categorie

Scopri di più su Resizing and Reshaping Matrices in Help Center e File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by