Octave / Matlab: étendre un vecteur en le faisant se répéter?

93

Existe-t-il un moyen d'étendre un vecteur en le faisant se répéter?

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

Alors la v10 serait:

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

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

À M
la source
Vous pouvez utiliser kron - l'opérateur du 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 souhaitez concaténer un vecteur de colonne yavec lui - même des Kheures, utilisez yK=kron(ones(K,1),y).
Pantelis Sopasakis

Réponses:

6

De toute évidence, repmat est la voie à suivre si vous savez dans quelle direction vous souhaitez étendre le vecteur.

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

 v10=v(repmat(1:length(v),1,5))
Dennis Jaheruddin
la source