You are on page 1of 6

Manipulacin bsica de matrices en MatLab

Junio 2014

Indice
I. Cmo se almacenan las matrices
II. La indexacin lineal
II.1. Acceder a un elemento de una matriz utilizando la indexacin lineal
II.2. Pasar de una indexacin a otra
II.2.1. La funcin ind2sub
II.2.2. La funcin sub2ind
III. La funcin reshape

I. Cmo se almacenan las matrices
MatLab almacena vectores y matrices, sin importar su dimensin, 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 (una columna
despus de otra).
(2)
(5)
(7)
(8)
(4)
(3)

II. La indexacin lineal
Esta manera de almacenar en MatLab implica que es posible acceder a los elementos de una
matriz con un solo ndice (que va de 1 hasta el nmero total de elementos de la matriz).
II.1. Acceder a un elemento de una matriz utilizando la indexacin lineal
Para el caso de las matrices, acabamos de ver que el vector columna correspondiente estaba
compuesto simplemente por las columnas de la matriz puestas una a continuacin de otra. Sin
embargo, es mas difcil de ver lo que pasa cuando manipulamos matrices de mas de 2
dimensiones. Veamos el caso particular de una matriz T de tres dimensiones, de 4X2X3. Esta
matriz contiene 24 elementos. Si los numeramos del 1 al 24 y consideramos (para mayor
claridad) que una matriz de 3 dimensiones es un conjunto de pginas (ltima dimensin)
conteniendo cada una de las matrices (las dos primeras dimensiones), entonces estarn
organizadas de este modo:
Por lo tanto, estos elementos estn organizados en el vector columna que corresponde a la
matriz incrementando el primer ndice de la matriz, luego el segundo, luego el tercero (y los
siguientes si trabajramos con mas de 3 dimensiones). A continuacin veamos cmo podemos
mostrar los elementos de T en el orden en que es almacenado. En primer lugar, asignemos un
valor a T:
T=rand(4,2,3);
En el vector columna correspondiente, los elementos vienen dados en el orden en que son
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 dividindolo segn la ultima dimensin, luego la
precedente y as sucesivamente. Por lo tanto, la divisin es hacha de esta manera:
Finalmente, en nuestro ejemplo, podemos acceder al dcimo primer elemento de la matriz T de
dos maneras:
T(3,1,2)
O
T(11)
Tan solo hay que escribir las siguientes lneas para ver que los elementos aparezcan en el
mismo orden como en las 3 bucles imbricadas precedentes.
for q=1:24
disp(T(q));
end

II.2. Pasar de una indexacin a otra
Dependiendo de cada caso, una u otra de las indexaciones puede ser ms prctica. Existen
funciones MatLab que simplifican la manipulacin de esta indexacin:
sub2ind permite pasar de la indexacin lineal a la indexacin mltiple.
ind2sub permite pasar de la indexacin mltiple a la indexacin lineal.
Para obtener ayuda acerca de estas funciones, en la ventana de MatLab escribe help sub2indo
help ind2sub. Para obtener ayuda mas detallada, escribe doc sub2ind o doc ind2sub. En
lugar de mostrar el uso de estas funciones en el caso general de una matriz de N dimensiones,
veremos un caso particular.
II.2.1. La funcin ind2sub
Para conocer la indexacin mltiple 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 funcin ind2sub es el tamao de la matriz a la cual queremos
efectuar la conversin indexacin lineal --> indexacin mltiple.
El segundo argumento v de la funcin ind2sub es el vector de los ndices que queremos
convertir.
El miembro de la izquierda [m n p] recibir los vectores correspondientes a la indexacin
mltiple.
Concretamente, para toda matriz T de 4x2x3 tendremos: T(m(1),n(1),p(1))=T(v(1))=T(3)
T(m(2),n(2),p(2))=T(v(2))=T(8) T(m(3),n(3),p(3))=T(v(3))=T(17) T(m(4),n(4),p(4))=T(v(4))=T(23)
Ahora podremos probar estas lneas:
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
para ver que hayamos obtenido el resultado esperado.
II.2.2. La funcin sub2ind
Supongamos que queramos convertir en indexacin lineal los multi-ndices (2,2,1), (1,2,3),
(4,1,2), (3,1,3) de una matriz de 4x2x3, entonces ser suficiente hacer:
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 funcin sub2ind es el tamao de la matriz a la cual queremos
efectuar la conversin indexacin mltiple --> indexacin lineal
Los siguientes argumentos son las columnas m, n, p, conteniendo los ndices de la
primera dimensin, los ndices de la segunda dimensin, los ndices de la tercera
dimensin respectivamente.
El miembro de la izquierda v recibir el vector correspondiente a la indexacin lineal.
Concretamente, para toda matriz T de 4x2x3 tendremos: T(v(1))=T(m(1),n(1),p(1))=T(2,1,1)
T(v(2))=T(m(2),n(2),p(2))=T(1,2,3) T(v(3))=T(m(3),n(3),p(3))=T(4,1,2)
T(v(4))=T(m(4),n(4),p(4))=T(3,1,3) Ahora podemos probar estas lneas:
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
para comprobar que hayamos obtenido el resultado esperado.
III. La funcin reshape
Teniendo en cuenta como se almacena una matriz en MatLab, fcilmente podemos comprender
que el tamao de una matriz no es importante y que solo es necesario una pequea funcin
para dar a una matriz la forma que queramos (siempre que el nmero de elementos no cambie).
La funcin MatLab que permite redimensionar una matriz es reshape. Como con las otras
funciones, para obtener ayuda acerca de esta funcin escribe en la ventana de MatLab help
reshape o doc reshape para obtener ayuda ms detallada. Para comprender la accin de la
instruccin 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 indexacin lineal y son colocados
en M en el mismo orden. Veamos nuevamente el ejemplo de la matriz T precedente (T es de
4x2x3). Como ya lo hemos dicho, el numero de elementos de esta matriz es 24. Vemos tambin
que es el numero de elementos de una matriz M de 6X4. Esto es lo que ocurre cuando se
escribe el siguiente cdigo:
M=reshape(T,[6 4]);
Cabe mencionar que fcilmente podemos obtener la matriz inicial T con la ayuda de M
redimensionndola adecuadamente:
TT=reshape(M,[4 2 3]);
La matriz TT es idntica a la matriz T inicial.
Este documento intitulado Manipulacin bsica de matrices en MatLab de Kioskea (es.kioskea.net) esta puesto a
diposicin bajo la licencia Creative Commons. Puede copiar, modificar bajo las condiciones puestas por la licencia,
siempre que esta nota sea visible.

You might also like