Story Transcript
Programaci´on I: Matrices - Arreglos bidimensionales Esteban De La Fuente Rubio 17 de junio de 2013
´Indice 1. Matrices 1.1. Operaciones b´ asicas . . . . . . 1.1.1. Suma . . . . . . . . . . 1.1.2. Producto por un escalar 1.1.3. Producto de matrices . 1.1.4. Traspuesta . . . . . . .
. . . . .
1 2 2 2 2 2
2. De matriz matem´ atica a un arreglo bidimensional 2.1. Iterando un arreglo bidimensional . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2 3
3. Ejercicios
3
1.
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
Matrices
Una matriz corresponde a un arreglo bidimensional de n´ umeros (esto en matem´aticas, pero podr´ıamos tener matrices de strings sin ning´ un problema dentro de un lenguaje de programaci´on). Las matrices son utilizadas, por ejemplo, en el ´ area de a´lgebra lineal, donde se pueden realizar diferentes operaciones sobre una matriz, como por ejemplo sumar dos matrices o multiplicarlas. Una matriz tiene un tama˜ no 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: 1 2 3 A = 4 5 6 7 8 9 B= 1 2 3 4 5
1 3 C= 5 7
2 4 6 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´ an por las coordenadas que representan su posici´on, estas coordenadas ser´ an (i, j), donde i es utilizado para identificar la fila y j para identificar la columna. Como somos computines las filas y columnas partir´ an en 0 (en matem´ aticas estos ´ındices partir´ an en 1). Seg´ un 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: 10,0 20,1 31,0 41,1 C= 52,0 62,1 73,0 83,1 Tenemos que en la coordenada (2, 1) se encuentra el elemento 6. Las coordenadas generalmente se representar´ an como ij, donde si c es un elemento perteneciente a la matriz C se indicar´a cada uno de los elementos como cij con 0 < i < N, 0 < j < M .
1
1.1. 1.1.1.
Operaciones b´ asicas Suma
Sea A, B ∈ MN ×M . Se define la operaci´ on suma de matrices como la operaci´on binaria + : MN ×M × MN ×M → MN ×M , tal que (A, B) → C = A + B y donde cij = aij + bij . Ejemplo: 1 2 2 5 1+2 2+5 3 7 + = = 3 0 3 4 3+3 0+4 6 4 A, B son matrices de N × M con N, M ≥ 1. 1.1.2.
Producto por un escalar
Ejemplo:
1 2 3
2 2∗1 = 0 2∗3
2∗2 2 = 2∗0 6
4 0
Se puede operar una matriz cualquiera de N × M con N, M ≥ 1. 1.1.3.
Producto de matrices
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´ as formalmente el producto de dos matrices A, B se define como: MN ×M × MM ×P → MN ×P tal que (A, B) → C = AB y donde cij = Σm k=1 aik bkj con 0 < i < N, 0 < j < P . Ejemplo: 3 1 1∗3+0∗2+2∗1 1∗1+0∗1+2∗0 5 1 1 0 2 2 1 = = −1 ∗ 3 + 3 ∗ 2 + 1 ∗ 1 −1 ∗ 1 + 3 ∗ 1 + 1 ∗ 0 4 2 −1 3 1 1 0 La matriz A deber´ a tener la misma cantidad de columnas que B de filas, o sea la restricci´on de que A es una matriz del tipo MN ×M y B una del tipo MM ×P . 1.1.4.
Traspuesta
Sea A una matriz de N × M , la traspuesta de A, o sea AT , de tama˜ no M × N se obtiene cambiando filas por columnas. Ejemplo: T 1 4 1 8 3 = 8 2 4 2 6 3 6 Se puede operar una matriz cualquiera de N × M con N, M ≥ 1.
2.
De matriz matem´ atica a un arreglo bidimensional
Una matriz puede ser representada en un lenguaje de programaci´on 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´odigo: 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´ a la coordenada (1, 1), lo anterior desde el punto de viste de c´odigo se pueede obtener con un print mediante: print (A[1][1])
2.1.
# 2
Iterando un arreglo bidimensional
A continuaci´ on 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])
3.
# iteramos las filas # iteramos las columnas de la fila i # se imprime elemento en coordenada (i,j)
Ejercicios
1. Ejecutar, revisar, estudiar y entender el ejemplo del cuadrado m´agico disponible en http://cursos.delaf.cl/cursos/ programacion/ejemplos/python#24-arreglos-bidimensionales 2. Programe la funci´ on cargar que recibe como par´ametro 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´ an separadas por espacio. Sean los archivos a.txt: 1 2 3 4 5 6 7 8 b.txt: 0 9 3 3
1 6 4 0
7 7 5 1
9 8 6 2
y c.txt: 4 3 2 1 8 7 6 5 Caso de prueba: 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´ an las matrices cargadas como un arreglo bidimensional. Utilice el siguiente c´ odigo para su soluci´ on (no cambie los par´ametros recibidos ni lo que se retorna): def cargar (archivo) : matriz = [] # agregar c´ odigo aqu´ ı return matriz 3
Importante: notar que los elementos de los arreglos son enteros, no strings, por lo cual deber´a convertirlos ya que lo le´ıdo de un archivo son strings. 3. Programe la funci´ on sumar que recibe dos matrices y entrega otra matriz que representa la suma. Caso de prueba: a = cargar ("a.txt") c = cargar ("c.txt") r = sumar (a, c) print (r) # [[5, 5, 5, 5], [13, 13, 13, 13]] Utilice el siguiente c´ odigo para su soluci´ on (no cambie los par´ametros recibidos ni lo que se retorna): def sumar (m1, m2) : matriz = [] # agregar c´ odigo aqu´ ı return matriz umero y entrega la matriz multiplicada por dicho 4. Programe la funci´ on producto escalar que recibe una matriz y un n´ escalar. Caso de prueba: a = cargar ("a.txt") r = producto_escalar (a, 3) print (r) # [[3, 6, 9, 12], [15, 18, 21, 24]] Utilice el siguiente c´ odigo para su soluci´ on (no cambie los par´ametros recibidos ni lo que se retorna): def producto_escalar (m, n) : matriz = [] # agregar c´ odigo aqu´ ı return matriz 5. Programe la funci´ on producto que recibe dos matrices y entrega su producto. Caso de prueba: a = cargar ("a.txt") b = cargar ("b.txt") r = producto (a, b) print (r) # [[39, 25, 40, 51], [99, 69, 120, 151]] Utilice el siguiente c´ odigo para su soluci´ on (no cambie los par´ametros recibidos ni lo que se retorna): def producto (m1, m2) : matriz = [] # agregar c´ odigo aqu´ ı return matriz 6. Programe la funci´ on traspuesta que recibe una matriz y entrega su traspuesta. Caso de prueba: b = cargar("b.txt") r = traspuesta (b) print (r) # [[0, 9, 3, 3], [1, 6, 4, 0], [7, 7, 5, 1], [9, 8, 6, 2]] 4
Utilice el siguiente c´ odigo para su soluci´ on (no cambie los par´ametros recibidos ni lo que se retorna): def traspuesta (m) : matriz = [] # agregar c´ odigo aqu´ ı return matriz Importante: no puede utilizar el m´etodo transpose de los arreglos.
5