2010-03-17 40 views
79

¿Hay alguna manera de extender un vector haciendo que se repita?Octave/Matlab: ¿Extiende un vector haciéndolo repetir?

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

Entonces v10 sería:

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

Esto debería funcionar para el caso general, no sólo para [1 2]

+0

Puede utilizar Kron - El operador del producto Kroencker. p.ej. 'v = [1 2]' y 'v100 = kron (unos (1,100), v)' es el vector 'v100 = [v v ... v]' (100 veces). Si quiere concatenar algunas columnas-vectores 'y' consigo mismo' K' veces, use 'yK = kron (unos (K, 1), y)'. –

Respuesta

127

La función que está buscando es repmat().

v10 = repmat(v, 1, 5) 
+0

Sí, lo es, muchas gracias. – Tom

+1

enlace a la documentación de octava: [http://www.gnu.org/software/octave/doc/interpreter/Special-Utility-Matrices.html#Special-Utility-Matrices](http://www.gnu.org/ software/octave/doc/intérprete/Special-Utility-Matrices.html # Special-Utility-Matrices) – Paweld2

6

Obviamente repmat es el camino a seguir si sabe en qué dirección desea expandir el vector.

Sin embargo, si desea una solución general que siempre se repite el vector en la dirección más larga, esta combinación de repmat y la indexación debe hacer el truco:

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