Octave / Matlab: Erweitern Sie einen Vektor, damit er sich wiederholt?

93

Gibt es eine Möglichkeit, einen Vektor zu erweitern, indem er sich wiederholt?

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

Dann wäre v10:

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

Dies sollte für den allgemeinen Fall funktionieren, nicht nur für [1 2]

Tom
quelle
Sie können kron - The Kroencker product operator verwenden. zB v=[1 2]und v100=kron(ones(1,100),v)ist der Vektor v100=[v v ... v](100 mal). Wenn Sie einen Spaltenvektor ymit sich selbst Kmal verketten möchten , verwenden Sie yK=kron(ones(K,1),y).
Pantelis Sopasakis

Antworten:

140

Die Funktion, die Sie suchen, ist repmat().

v10 = repmat(v, 1, 5)
Andrew Shepherd
quelle
1
Link zur
Oktavdokumentation
6

Offensichtlich ist repmat der richtige Weg, wenn Sie wissen, in welche Richtung Sie den Vektor erweitern möchten.

Wenn Sie jedoch eine allgemeine Lösung wünschen, die den Vektor immer in der längsten Richtung wiederholt, sollte diese Kombination aus Repmat und Indizierung den Trick tun:

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