Programación I: Matrices - Arreglos bidimensionales Esteban De La Fuente Rubio 17 de junio de 2013 Índice 1. Matrices 1 1.1. Operaciones básicas.................................................... 2 1.1.1. Suma........................................................ 2 1.1.2. Producto por un escalar.............................................. 2 1.1.3. Producto de matrices............................................... 2 1.1.4. Traspuesta..................................................... 2 2. De matriz matemática a un arreglo bidimensional 2 2.1. Iterando un arreglo bidimensional............................................. 3 3. Ejercicios 3 1. Matrices Una matriz corresponde a un arreglo bidimensional de números (esto en matemáticas, pero podríamos tener matrices de strings sin ningún problema dentro de un lenguaje de programación). Las matrices son utilizadas, por ejemplo, en el área de álgebra lineal, donde se pueden realizar diferentes operaciones sobre una matriz, como por ejemplo sumar dos matrices o multiplicarlas. Una matriz tiene un tamaño N M, donde si N M se dice que es una matriz cuadrada. N representa la cantidad de filas y M la cantidad de columnas, así podemos tener las siguientes matrices: 3 A 4 5 6 7 8 9 B ( 3 4 5 ) C 3 4 5 6 7 8 A es una matriz de 3 3, B es una matriz de 1 5 y C es una matriz de 4 2. Los elementos de una matriz se identificarán por las coordenadas que representan su posición, estas coordenadas serán (i, j), donde i es utilizado para identificar la fila y j para identificar la columna. Como somos computines las filas y columnas partirán en 0 (en matemáticas estos índices partirán en 1). Según lo indicado antes podemos construir la matriz C indicando en cada elemento la coordenada con la que se encuentra dicho elemento dentro de la matriz: 1 0,0 2 0,1 C 3 1,0 4 1,1 5 2,0 6 2,1 7 3,0 8 3,1 Tenemos que en la coordenada (2, 1) se encuentra el elemento 6. Las coordenadas generalmente se representarán como ij, donde si c es un elemento perteneciente a la matriz C se indicará cada uno de los elementos como c ij con 0 < i < N, 0 < j < M. 1
1.1. Operaciones básicas 1.1.1. Suma Sea A, B M N M. Se define la operación suma de matrices como la operación binaria + : M N M M N M M N M, tal que (A, B) C A + B y donde c ij a ij + b ij. + 3 0 A, B son matrices de N M con N, M 1. 1.1.2. Producto por un escalar 2 2 5 3 4 3 0 1 + 2 2 + 5 3 + 3 0 + 4 2 2 2 3 2 0 Se puede operar una matriz cualquiera de N M con N, M 1. 1.1.3. Producto de matrices 2 4 6 0 3 7 6 4 El producto de dos matrices A, B se obtiene operando una fila de la matriz A con una columna de la matriz B, donde se multiplica cada elemento y se hace la sumatoria posteriormente, colocando el valor en una casilla de la matriz C resultante. Más formalmente el producto de dos matrices A, B se define como: M N M M M P M N P tal que (A, B) C AB y donde c ij Σ m k1 a ikb kj con 0 < i < N, 0 < j < P. ( 1 0 2 1 3 1 ) 3 1 2 1 1 3 + 0 2 + 2 1 1 1 + 0 1 + 2 0 1 3 + 3 2 + 1 1 1 1 + 3 1 + 1 0 1 0 5 1 4 2 La matriz A deberá tener la misma cantidad de columnas que B de filas, o sea la restricción de que A es una matriz del tipo M N M y B una del tipo M M P. 1.1.4. Traspuesta Sea A una matriz de N M, la traspuesta de A, o sea A T, de tamaño M N se obtiene cambiando filas por columnas. T 1 8 3 1 4 8 2 4 2 6 3 6 Se puede operar una matriz cualquiera de N M con N, M 1. 2. De matriz matemática a un arreglo bidimensional Una matriz puede ser representada en un lenguaje de programación como un arreglo bidimensional, en el caso de Python esto se puede ver como un arreglo de arreglos o bien una lista de listas. Por ejemplo si tenemos la matriz: ( 1 8 ) 3 4 2 6 Podemos representarla en Python mediante el siguiente código: A [ [1, 8, 3], [4, 2, 6] ] 2
Para acceder a los elementos de la matriz lo hacemos mediante sus índices i, j, por ejemplo para acceder al elemento 2 este tendrá la coordenada (1, 1), lo anterior desde el punto de viste de código se pueede obtener con un print mediante: print (A[1][1]) # 2 2.1. Iterando un arreglo bidimensional A continuación se muestra un ejemplo de como iterar un arreglo bidimensional e ir imprimiendo cada uno de sus valores: # sea A una matriz cualquiera A [...] for i in range(len(a)) : for j in range (len(a[i])) : print (A[i][j]) # iteramos las filas # iteramos las columnas de la fila i # se imprime elemento en coordenada (i,j) 3. Ejercicios 1. Ejecutar, revisar, estudiar y entender el ejemplo del cuadrado mágico disponible en http://cursos.delaf.cl/cursos/ programacion/ejemplos/python#24-arreglos-bidimensionales 2. Programe la función cargar que recibe como parámetro el nombre de un archivo donde se encuentra una matriz y retorna la matriz en una lista de listas (arreglo bidimensional). Cada línea del archivo es una fila de la matriz y las columnas de dicha matriz (en el archivo) están separadas por espacio. Sean los archivos a.txt: 3 4 5 6 7 8 b.txt: 0 1 7 9 9 6 7 8 3 4 5 6 3 0 y c.txt: 4 3 2 1 8 7 6 5 a cargar("a.txt") b cargar("b.txt") c cargar("c.txt") print (a) # [[1, 2, 3, 4], [5, 6, 7, 8]] print (b) # [[0, 1, 7, 9], [9, 6, 7, 8], [3, 4, 5, 6], [3, 0, 1, 2]] print (c) # [[4, 3, 2, 1], [8, 7, 6, 5]] Las variables a, b y c tendrán las matrices cargadas como un arreglo bidimensional. def cargar (archivo) : 3
Importante: notar que los elementos de los arreglos son enteros, no strings, por lo cual deberá convertirlos ya que lo leído de un archivo son strings. 3. Programe la función sumar que recibe dos matrices y entrega otra matriz que representa la suma. a cargar ("a.txt") c cargar ("c.txt") r sumar (a, c) # [[5, 5, 5, 5], [13, 13, 13, 13]] def sumar (m1, m2) : 4. Programe la función producto escalar que recibe una matriz y un número y entrega la matriz multiplicada por dicho escalar. a cargar ("a.txt") r producto_escalar (a, 3) # [[3, 6, 9, 12], [15, 18, 21, 24]] def producto_escalar (m, n) : 5. Programe la función producto que recibe dos matrices y entrega su producto. a cargar ("a.txt") b cargar ("b.txt") r producto (a, b) # [[39, 25, 40, 51], [99, 69, 120, 151]] def producto (m1, m2) : 6. Programe la función traspuesta que recibe una matriz y entrega su traspuesta. b cargar("b.txt") r traspuesta (b) # [[0, 9, 3, 3], [1, 6, 4, 0], [7, 7, 5, 1], [9, 8, 6, 2]] 4
def traspuesta (m) : Importante: no puede utilizar el método transpose de los arreglos. 5