2011-07-31 7 views

Respuesta

12

Usted está buscando la función REPMAT:

x = [1 2 2 3]; 
m = repmat(x,4,1); 

También puede utilizar la indexación de repetir las filas:

o incluso externa subproducto:

m = ones(4,1)*x; 

y también utilizando BSXFUN:

m = bsxfun(@times, x, ones(4,1)) 
+0

y si quiero para construir 'm = [1 2 2 3; 2 4 4 6; 3 6 6 9] '? – Simon

+2

use la solución BSXFUN: 'm = bsxfun (@times, x, (1: 3) ')' – Amro

+0

Si no recuerdo mal, usar la indexación es más rápido que usar repmat. Pero también es mucho menos legible. – MarkV

0

Usted podría tratar de usar vertcat, así:

x = [1 2 2 3]; 
m = vertcat(x,x,x,x); 

O incluso simplemente:

x = [1 2 2 3]; 
m = [x;x;x;x]; 

EDIT:

para múltiplos de x, se puede hacer:

x = [1 2 2 3]; 
m = [x;2*x;3*x]; % [1 2 2 3; 2 4 4 6; 3 6 6 9] 

Edit2:

Para un número arbitrario de los x en el m ...

n = 3; % number of repetitions... 
x = [1 2 2 3]; 
m = []; 
for i=1:n 
    m = [m;x]; 
end 
+0

el problema es que quiero pasar un argumento con el número de múltiplos. Quiero hacer esto dentro de un ciclo for y el número de veces para concatenar los vectores crudos es indeterminado. – Simon

+0

Ah, no mencionó eso en su pregunta ... (He editado mi respuesta) –

Cuestiones relacionadas