Matlab: ripeti ogni colonna in sequenza n volte

Sono praticamente principiante quindi è probabilmente ansible fare ciò che voglio in un modo semplice. Ho una matrice 121×62 ma ho bisogno di espanderla a 121×1488, quindi ogni colonna deve essere ripetuta 24 volte. Ad esempio, trasforma questo:

2.2668 2.2667 2.2667 2.2666 2.2666 2.2666 2.2582 2.2582 2.2582 2.2582 2.2581 2.2581 2.283 2.283 2.283 2.2829 2.2829 2.2829 2.2881 2.2881 2.2881 2.2881 2.2881 2.288 2.268 2.268 2.2679 2.2679 2.2678 2.2678 2.2742 2.2742 2.2741 2.2741 2.2741 2.274 

in questo:

 2.2668 2.2668 2.2668 and so on to 24th 2.2667 2.2667 and again to 24x 2.2582 2.2582 2.2582 ... 

con ogni colonna.

Ho provato a creare un vettore con questi valori e quindi a trasformare con vec2mat e ok ho una matrice 121×1488 ma ripetuto da righe:

 2.2668 2.2668 2.2668 2.2668 2.2668 2.2668 ... 2.2582 2.2582 2.2582 2.2582 ... 

Come farlo con le colonne?

Supponiamo di avere questo input semplificato e di voler espandere le colonne in sequenza n volte:

 A = [1 4 2 5 3 6]; szA = size(A); n = 3; 

Ci sono alcuni modi per farlo:

  • Replica, quindi rimodella:

     reshape(repmat(A,n,1),szA(1),n*szA(2)) 
  • Prodotto Kronecker:

     kron(A,ones(1,n)) 
  • Usando FEX: expand() :

     expand(A,[1 n]) 
  • Dal momento che R2015a, repelem() :

     repelem(A,1,n) 

Tutti danno lo stesso risultato:

 ans = 1 1 1 4 4 4 2 2 2 5 5 5 3 3 3 6 6 6 

Solo per completezza. Se vuoi duplicare lungo le righe, puoi anche usare rectpulse ().

 A = [1,2,3;... 4,5,6]; n = 3; rectpulse(A, n); 

ti dà

 1 2 3 1 2 3 1 2 3 4 5 6 4 5 6 4 5 6 

Ecco qui:

 function [result] = repcolumn(A, n) %n - how many times each column from A should be repeated [rows columns] = size(A); result = repmat(A(:,1),1,n); for i = 2:columns result = [result,repmat(A(:,i),1,n)]; end end 

Ci deve essere un modo più semplice ma fa il lavoro.