Octave / Matlab: rozszerzyć wektor, aby się powtórzył?

93

Czy istnieje sposób na wydłużenie wektora poprzez jego powtórzenie?

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

Wtedy wersja 10 wyglądałaby:

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

Powinno to działać w przypadku ogólnym, a nie tylko w przypadku [1 2]

Tomek
źródło
Możesz użyć kron - operatora produktu Kroencker. np. v=[1 2]i v100=kron(ones(1,100),v)jest wektorem v100=[v v ... v](100 razy). Jeśli chcesz połączyć jakiś wektor kolumnowy yze sobą K, użyj yK=kron(ones(K,1),y).
Pantelis Sopasakis

Odpowiedzi:

6

Oczywiście repmat jest drogą do zrobienia, jeśli wiesz, w którym kierunku chcesz rozszerzyć wektor.

Jeśli jednak chcesz uzyskać ogólne rozwiązanie, które zawsze powtarza wektor w najdłuższym kierunku, ta kombinacja repmat i indeksowania powinna załatwić sprawę:

 v10=v(repmat(1:length(v),1,5))
Dennis Jaheruddin
źródło