2010-02-05 24 views
5

¿Alguien sabe si hay una manera de producir una matriz 2D de una matriz 1D, donde las filas en 2D se generan repitiendo los elementos correspondientes en la matriz 1D.Producir matriz 2D de una matriz 1D en MATLAB

es decir .:

1D array  2D array 

    |1|  |1 1 1 1 1| 
    |2|  |2 2 2 2 2| 
    |3| -> |3 3 3 3 3| 
    |4|  |4 4 4 4 4| 
    |5|  |5 5 5 5 5| 

Respuesta

8

Usted puede hacer esto mediante la función de REPMAT:

>> A = (1:5).' 

A = 

    1 
    2 
    3 
    4 
    5 

>> B = repmat(A,1,5) 

B = 

    1  1  1  1  1 
    2  2  2  2  2 
    3  3  3  3  3 
    4  4  4  4  4 
    5  5  5  5  5 

EDIT: PRIMA RESPUESTA! ;)

Para su ejemplo, REPMAT es la función más sencilla de usar. Sin embargo, otra función de enfriamiento a tener en cuenta es KRON, que también se puede utilizar como una solución de la siguiente manera:

B = kron(A,ones(1,5)); 

Para los pequeños vectores y matrices KRON puede ser ligeramente más rápido, pero es un buen un poco más lento para matrices más grandes.

+0

Grande, muchas gracias! – Richard

1

repmat (a, [1 n]), pero también debería echar un vistazo a meshgrid.

0

Usted podría intentar algo como:

a = [1 2 3 4 5]' 
l = size(a) 
for i=2:5 
    a(1:5, i) = a(1:5) 

El bucle sólo sigue añadiendo columnas hasta el final.

+1

Para matrices pequeñas, esta solución es más rápida, pero para tamaños más grandes repmat es una solución mucho mejor. (¡Con una matriz de 1000x1000, repmat es 500+ veces más rápido!) – Doresoom

+0

Estoy de acuerdo, mi solución es bastante ingenua, el uso de repmat es una solución mucho mejor/más elegante en general. – zdav

9

En el espíritu de respuestas de bonificación, aquí están algunos de mi propia:

Vamos A = (1:5)'

  1. El uso de índices [más rápido que repmat]:

    B = A(:, ones(5,1)) 
    
  2. Usando exterior matriz producto:

    B = A*ones(1,5) 
    
  3. Usando bsxfun() [no es la mejor forma de hacerlo]

    B = bsxfun(@plus, A, zeros(1,5)) 
    %# or 
    B = bsxfun(@times, A, ones(1,5)) 
    
+2

+1 para el truco de índices – merv

+0

kron ((1: 5) ', unos (1,5)) –

+1

cumsum (unos (5)) –

Cuestiones relacionadas