2010-03-17 11 views
79

Gibt es eine Möglichkeit, einen Vektor zu erweitern, indem er sich selbst wiederholt?Octave/Matlab: Erweitern Sie einen Vektor, so dass er sich wiederholt?

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

Dann würde v10 sein:

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

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

+0

Sie kron verwenden - Der Kroencker Produkt-Operator. z.B. 'v = [1 2]' und 'v100 = kron (Einsen (1.100), v)' ist der Vektor 'v100 = [v v ... v]' (100 mal). Wenn Sie einen Spaltenvektor 'y' mit sich selbst' K' verketten wollen, verwenden Sie 'yK = kron (Einsen (K, 1), y)'. –

Antwort

127

Die Funktion, die Sie suchen repmat() ist.

+0

Ja es ist, vielen Dank. – Tom

+1

Link zur Oktav-Dokumentation: [http://www.gnu.org/software/octave/doc/interpreter/Special-Utility-Matrices.html#Special-Utility-Matrices](http://www.gnu.org/ software/oktave/doc/interpreter/Spezial-Utility-Matrizen.html # Spezial-Utility-Matrizen) – Paweld2

6

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

Wenn Sie jedoch eine allgemeine Lösung wollen, die den Vektor in der längsten Richtung immer wiederholt, diese Kombination von repmat und Indizierung sollte es tun:

v10=v(repmat(1:length(v),1,5)) 
Verwandte Themen