¿Cómo puedo cambiar el tamaño de una matriz en MATLAB?
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?
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()
.