[MÚSICA] Hola. Con esta presentación damos inicio a la última lección del módulo 3 del curso, dedicada al tema de Matrices. Empecemos entendiendo qué son las matrices. Estas son estructuras bidimensionales de datos dentro de la cuales, los valores se organizan en filas y columnas. Esta matriz M por ejemplo tiene, cuatro filas y tres columnas. Lo cual abreviamos diciendo que es una matriz de dimensión 4 por 3. En Python, una matriz se representa como una lista de listas. Veamos entonces nuestra matriz M. Esa matriz dijimos tiene 4 filas, es decir, que es una lista que contiene 4 elementos. Cada uno de esos elementos es a su vez, otra lista de 3 posiciones cada una, las cuales representan las columnas. Podemos ver aquí la instrucción de Python que nos permite crear la matriz M. Tenemos la lista exterior, es decir, la lista de filas. Una, dos, tres y cuatro filas contiene nuestra matriz. Cada una de estas dijimos, es a su vez una lista con los elementos de las columnas. Aquí tenemos la fila 0 con sus elementos 1, 2, y 3. 1, 2 y 3. La fila 1, con los elementos 2, 12 y 6. La fila 2 con los elementos 1, 0, menos 3 y la fila 3 con los elementos 0, menos 1 y 0. Dado que la matriz es una lista de listas, para acceder a un elemento en particular, necesitamos una doble indexación. Veamos cómo se usa esto. Tenemos nuestra matriz M como la creamos en la diapositiva anterior. Para acceder al elemento que está en la fila 0, columna 0, necesitamos doble índice. El primero de estos nos indica, la fila en la cuál se encuentra el elemento y el segundo índice, nos indica la columna dentro de la fila. Miremos entonces, el elemento 0,0 es el que está en la fila 0, columna 0, es decir, el valor 1. El elemento que está ubicado en la posición 0,1 está en la fila 0, columna 1, es decir el elemento 2. El que está en la posición 1,1 es fila 1, columna 1. Veamos. Vamos a la fila 1, a la columna 1 y obtenemos el valor 12. Crear una matriz no es más entonces, que crear una lista de listas. Si deseamos crear una matriz nula, es decir, una matriz cuyos componentes son todos igual al valor 0, de tamaño 2 con 2, bastará con escribir la siguiente instrucción. Tenemos nuestra lista de listas, 2 filas, la fila 0, la fila 1, cada una con 2 elementos cuyos valores todos son 0. Si imprimimos cada una de las filas con un cambio de línea en el medio, vamos a ver el contenido de la matriz. Crear una matriz parece muy sencillo, ¿verdad? Pero y si deseamos crear una matriz de 6 por 6 o de 10 por 10 o pero aún de 100 por 100, lo vamos a escribir explícitamente, ¿línea por línea? Será, muy tedioso. Primero que todo recordemos que con el operador asterisco multiplicación, podemos crear listas de cualquier tamaño siempre que tengan el mismo valor. Miremos este ejemplo. Con esta instrucción, lo que estamos obteniendo es una lista de 6 elementos, todos con el valor 0. Ahora bien, como una matriz es una lista de listas, si creamos una lista con 3 duplicados de la lista A, obtendremos la matriz de 3 filas por 6 columnas. Aquí la podemos observar. Veamos qué pasa si al elemento de la posición 0,0 de la matriz que creamos anteriormente, le asignamos el valor 1. Esperaríamos que sólo este elemento fuera modificado, es decir que un único elemento de la matriz, tuviera el valor 1 y el resto 0. Y no, fíjense qué fue lo que pasó. Los primeros elementos de todas las listas, es decir de todas las filas de la matriz, fueron modificados, ¿por qué? Para entender qué fue lo que pasó, es muy importante que analicemos paso por paso cada una de las instrucciones. Lo primero que hicimos fue crear la lista a de esta manera, ¿lo recuerdan? Posteriormente creamos nuestra matriz, es decir, la lista de listas triplicando la lista a y este fue el resultado, una matriz de 3 filas por 6 columnas. ¿Qué hizo Phyton? Nos obedeció copiando 3 veces la referencia a dicha lista. En realidad no tenemos 3 filas independientes en nuestra matriz sino que los 3 elementos de la lista M, apuntan todos a la misma lista interna. Después modificamos el elemento de la posición 0,0 asignándole el valor 1, es decir fuimos a la fila 0, columna 0 y allí guardamos el valor 1. ¿Qué pasó? Que también modificamos el elemento de la fila 1,columna 0 y el elemento de la fila 2, columna 0 pues todos son, el mismo elemento. ¿Qué aprendimos? Que hay que construir matrices con mucho más cuidado, asegurándonos de que cada fila es en realidad, una lista diferente de las anteriores. Para esto es indispensable primero, crear la matriz vacía y luego utilizar una instrucción iterativa, en este caso, un for in, para crear fila por fila, cada una de las filas de nuestra matriz. Si queremos crear una matriz de 3 filas, debemos iterar 3 veces. Con esta instrucción dentro del ciclo estamos asegurando que cada vez, estamos creando una nueva lista que es añadida a la matriz, asegurándonos que todas las filas son independientes entre sí. De esta manera, si en la posición 0,0 de nuestra matriz guardamos el valor 1, veremos que sólo este elemento, el de la fila 0, columna 0 es modificado y el resto de la matriz, permanece inalterada. Si queremos llenar una matriz de tamaño determinado con valores que vamos a pedir al usuario, podemos crear una matriz nula como lo vimos anteriormente y a continuación, solicitar los valores para llenarla. Veamos este ejemplo, paso por paso. Empezamos solicitando al usuario que nos digite la dimensión de la matriz. Guardamos en la variable M el número de filas y en la variable n, el número de columnas. Creamos la matriz nula como lo vimos anteriormente, con un ciclo de M iteraciones, una por cada una de las filas que queremos crear y por dentro, creamos la fila con n columnas, cuyos valores son todos 0. Posteriormente vamos a pedir al usuario que nos digite uno por uno, los valores de la matriz y vamos a llenarla fila por fila. Para esto, necesitamos un doble recorrido. Con el ciclo externo, iremos recorriendo nuestra matriz fila por fila y con el ciclo interno, iremos recorriendo columna por columna, cada una de las casillas de la matriz. Notemos entonces que con la variable i, haremos referencia a la fila y con la variable j, haremos referencia a la columna de cada uno de los elementos de nuestra matriz. Guardaremos así, en esta casilla de la matriz el valor que nos digite el usuario y esto lo haremos para todas y cada una de las casillas de nuestra matriz. Dado que una matriz es una lista de listas, podemos utilizar la función len para conocer su dimensión. Esto es el número de filas y columnas. Supongamos que tenemos nuestra matriz a, con tres filas y dos columnas. Len de a, nos devuelve el número de filas. Len de a sub 0, nos devuelve el número de columnas. [MÚSICA]