Octave / Matlab: Estender um vetor fazendo com que ele se repita?

93

Existe uma maneira de estender um vetor fazendo com que ele se repita?

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

Então v10 seria:

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

Isso deve funcionar para o caso geral, não apenas para [1 2]

Tom
fonte
Você pode usar kron - O operador de produto Kroencker. por exemplo, v=[1 2]e v100=kron(ones(1,100),v)é o vetor v100=[v v ... v](100 vezes). Se você quiser concatenar algum vetor-coluna ycom ele mesmo K, use yK=kron(ones(K,1),y).
Pantelis Sopasakis

Respostas:

6

Obviamente, repmat é o caminho a percorrer se você souber em qual direção deseja expandir o vetor.

No entanto, se você deseja uma solução geral que sempre repete o vetor na direção mais longa, esta combinação de repmat e indexação deve resolver o problema:

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