2011-12-23 18 views
5

me gusta woutld para dividir una matriz en trozos iguales como este:array dividido en pedazos en MATLAB

a=[1 2 3 4 5 6 7 8 9 10] 
n = 2; 
b = split(a, n); 

b = 

1  2  3  4  5 
6  7  8  9 10 

Qué función puede hacer esto?

Respuesta

13

Prueba esto:

a = [1 2 3 4 5 6] 
reshape (a, 2, 3) 
+0

Muchas gracias. – Elijah

+7

Esto realmente no da la salida que se pide en la pregunta. Tiene que ser 'remodelar (a, 3,2) ''. – yuk

+0

@Ze Ji ¿Hay alguna función para unir las matrices nuevamente después de la remodelación? – Jerky

11

Si a puede ser dividido por n en realidad se puede dar sólo un argumento para formar de nuevo.

para formar de nuevo a 2 filas:

b = reshape(a,2,[]) 

para formar de nuevo a 2 columnas:

b = reshape(a,[],2) 

Nota que reforman obras de columnas, que se llena la primera columna en primer lugar, a continuación, segundo, y así sucesivamente . Para obtener el resultado deseado, debe cambiar la forma en 2 columnas y luego transponer el resultado.

b = reshape(a,[],2)' 

Se puede colocar un cheque antes de remodelar:

assert(mod(numel(a),n)==0,'a does not divide to n') 
+0

¿Hay alguna función para unir las matrices nuevamente después de la remodelación? – Jerky

+0

¿De qué matrices estás hablando? Claro, puede volver a formarse en el vector original: 'a2 = remodelar (b ', 1, []);' – yuk

+0

¿Es posible hacer una remodelación donde 'a/n ~ = int' y luego volver a llenar el final con ceros o NaN? – josh