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.