En este artículo vamos a explicar los conocimientos básicos necesarios para comenzar a utilizar las matrices, conjunto de números ordenados en filas y columnas, en MATLAB.
MATLAB almacena vectores y matrices, sin importar su dimensión, como vectores columna.
Por ejemplo, la siguiente matriz:
(2 7 4)
(5 8 3)
es almacenada en un vector columna formado por las columnas de la matriz, es decir, una columna después de otra:
(2)
(5)
(7)
(8)
(4)
(3)
Para el caso de las matrices acabamos de ver que el vector columna correspondiente estaba compuesto por las columnas de la matriz dispuestas una tras otra.
Sin embargo, resulta complicado ver lo que pasa cuando manipulamos matrices de más de dos dimensiones.
Veamos el caso particular de una matriz </bold>T de<bold> tres dimensiones: 4x2x3. Esta matriz contiene 24 elementos. Si los numeramos del 1 al 24 y consideramos (para mayor claridad) que una matriz de tres dimensiones es un conjunto de páginas (última dimensión) conteniendo cada una de las matrices (las dos primeras dimensiones), entonces estarán organizadas de este modo:
Por lo tanto, estos elementos están organizados en el vector columna que corresponde a la matriz incrementando el primer índice de la matriz, luego el segundo, luego el tercero y así sucesivamente.
Veamos a continuación cómo podemos mostrar los elementos de T en el orden en que están almacenados.
En primer lugar asignemos un valor a T:
T=rand(4,2,3);
En el vector columna correspondiente, los elementos vienen dados por el orden en el que están almacenados por:
for p=1:3
for n=1:2
for m=1:4
disp(T(m,n,p));
end
end
end
Dicho de otro modo, partiendo de un vector columna correspondiente al almacenamiento de una matriz, este es ordenado en la matriz dividiéndolo según la última dimensión. Después luego la precedente y así sucesivamente. Por lo tanto, la división se realiza de la siguiente forma:
Finalmente, en nuestro ejemplo podemos acceder al décimo primer elemento de la matriz T de dos maneras:
T(3,1,2)
T(11)
Tan solo hay que escribir las siguientes líneas para ver que los elementos aparecen en el mismo orden:
for q=1:24
disp(T(q));
end
En función del caso será más práctico emplear una indexación u otra. Existen funciones MATLAB que simplifican esta manipulación:
Nota: Para obtener ayuda acerca de estas funciones debe accederse a la ventana de MATLAB y escribir help sub2ind o help ind2sub.
Para conocer la indexación múltiple correspondiente a los índices 3, 8, 17, 23 de una tabla de 4x2x3 tan solo hay que hacer:
v=[3;8;17;23];
[m n p]=ind2sub([4 2 3],v);
El primer argumento de la función ind2sub es el tamaño de la matriz a la cual queremos efectuar la conversión “indexación lineal --> indexación múltiple”.
El segundo argumento v de la función ind2sub es el vector de los índices que queremos convertir.
El miembro de la izquierda [m n p] recibirá los vectores correspondientes a la indexación múltiple.
T=rand(4,2,3);
v=[3;8;17;23];
[m n p]=ind2sub([4 2 3],v);
for q=1:4
disp([T(m(q),n(q),p(q)), T(v(q))]);
end
m=[2;1;4;3];
n=[2;2;1;1];
p=[1;3;2;3];
v=sub2ind([4 2 3],m,n,p);
El primer argumento de la función sub2ind es el tamaño de la matriz a la cual queremos efectuar la conversión “indexación múltiple --> indexación lineal”.
Los siguientes argumentos son las columnas m, n, p, conteniendo los índices de la primera dimensión, los índices de la segunda dimensión, los índices de la tercera dimensión respectivamente.
El miembro de la izquierda v recibirá el vector correspondiente a la indexación lineal.
T=rand(4,2,3);
m=[2;1;4;3];
n=[2;2;1;1];
p=[1;3;2;3];
v=sub2ind([4 2 3],m,n,p);
for q=1:4
disp([T(v(q)), T(m(q),n(q),p(q))]);
end
Teniendo en cuenta cómo se almacena una matriz en MATLAB podemos comprender fácilmente que el tamaño de una matriz no es importante y que solo es necesario una pequeña función para dar a una matriz la forma que queramos (siempre que el número de elementos no cambie). La función que permite redimensionar una matriz es conocida como reshape.
Como con las otras funciones, para obtener ayuda acerca de esta función escribe en la ventana de MATLAB help reshape o doc reshape para obtener ayuda más detallada.
Para comprender la acción de la instrucción reshape, tan solo debemos saber que redimensionando una matriz T en una matriz M, los elementos de T son tomados en orden creciente de su indexación lineal y son colocados en M en el mismo orden.
Veamos nuevamente el ejemplo de la matriz T precedente (de 4x2x3).
Como ya hemos mencionado antes, el número de elementos de esta matriz es 24. Vemos también que el número de elementos de una matriz M es de 6X4. Esto es lo que ocurre cuando se escribe el siguiente código:
M=reshape(T,[6 4]);
TT=reshape(M,[4 2 3]);