Pregunta

Supongamos que tenía un 1-por-12 matriz y quería cambiar su tamaño a un 4-por-3 matriz. ¿Cómo podría hacer esto?

Mi solución actual es un poco feo:

for n = 1:(length(mat)/3)
    out(n,1:3) = mat( ((n-1)*3 + 1):((n-1)*3 + 3) );
end

¿Hay una mejor manera de hacer esto?

¿Fue útil?

Solución

reshape es por supuesto la solución adecuada, como se indica por @gnovice .

Una característica interesante de reshape es que permite lo siguiente:

A = 1:12;
B = reshape(A,4,[]);
B =
     1     5     9
     2     6    10
     3     7    11
     4     8    12

Así que si usted no sabe cuántas columnas habrá, reshape calculará por usted. Del mismo modo, reshape rellenará el número de filas, si sale de eso.

C = reshape(A,[],4)
C =
     1     4     7    10
     2     5     8    11
     3     6     9    12

Otros consejos

RECONFIGURAREMOS función:

A = (1-by-12 matrix);
B = reshape(A,4,3);

Tenga en cuenta que la matriz B será llenado con elementos de A de una manera por columnas (es decir, columnas serán llenados de arriba a abajo, moviéndose de izquierda a derecha).

Ejemplo:

>> A = 1:12;
>> B = reshape(A,4,3)

B =

     1     5     9
     2     6    10
     3     7    11
     4     8    12

para extender la solución de gnovice:

Si necesita un orden diferente de la construcción de la matriz, el uso de transposición (el "operador) o permute() para cambiar el orden de dimensión después de haber llamado reshape().

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top