2010-03-17 5 views
79

Existe-t-il un moyen d'étendre un vecteur en le faisant se répéter?Octave/Matlab: étendre un vecteur qui le fait se répéter?

>v = [1 2]; 
>v10 = v x 5; %x represents some function. Something like "1 2" x 5 in perl 

Alors v10 serait:

>v10 
    1 2 1 2 1 2 1 2 1 2 

Cela devrait fonctionner pour le cas général, non seulement pour [1 2]

+0

Vous pouvez utiliser kron - L'opérateur produit Kroencker. par exemple. 'v = [1 2]' et 'v100 = kron (ones (1 100), v)' est le vecteur 'v100 = [v v ... v]' (100 fois). Si vous voulez concaténer un certain nombre de fois le vecteur-colonne 'y' avec lui-même' K', utilisez 'yK = kron (ones (K, 1), y)'. –

Répondre

127

La fonction que vous cherchez est repmat().

v10 = repmat(v, 1, 5) 
+0

Oui, merci beaucoup. – Tom

+1

lien vers la documentation d'octave: [http://www.gnu.org/software/octave/doc/interpreter/Special-Utility-Matrices.html#Special-Utility-Matrices](http://www.gnu.org/ logiciel/octave/doc/interprète/Special-Utility-Matrices.html # Special-Utility-Matrices) – Paweld2

6

De toute évidence, repmat est le chemin à parcourir si vous savez dans quelle direction vous voulez étendre le vecteur.

Cependant, si vous voulez une solution générale qui se répète toujours le vecteur dans la direction la plus longue, cette combinaison de repmat et l'indexation devrait faire l'affaire:

v10=v(repmat(1:length(v),1,5)) 
Questions connexes