#!/usr/bin/env python # coding: utf-8 # Open In Colab # # Matrices # Una matriz 4×5. # Cuatro filas, cinco columnas. # $$A_{(4×5)} = # \begin{pmatrix} # a_{11} & a_{12} & a_{13} & a_{14} & a_{15} \\ # a_{21} & a_{22} & a_{23} & a_{24} & a_{25} \\ # a_{31} & a_{32} & a_{33} & a_{34} & a_{35} \\ # a_{41} & a_{42} & a_{43} & a_{44} & a_{45} \\ # \end{pmatrix} # $$ # In[1]: def imprimir(matriz): for f in range(len(matriz)): linea = "" for c in range(len(matriz[f])): linea += str(matriz[f][c]) + " " print(linea) if __name__ == "__main__": matriz = [ [1,3,4], [4,5,6], [7,8,9] ] imprimir(matriz) # **Ejercicio** # En álgebra la [traza](https://es.wikipedia.org/wiki/Traza_(%C3%A1lgebra_lineal)) es la suma de la diagonal principal de una matriz. # Generar una matriz de números aleatorios y calcular su traza. # ## Transponer una matriz # ### Usando `zip` # Consideremos la siguiente matriz 3×4. # $$A_{(3×4)} = # \begin{pmatrix} # a_{11} & a_{12} & a_{13} & a_{14} \\ # a_{21} & a_{22} & a_{23} & a_{24} \\ # a_{31} & a_{32} & a_{33} & a_{34} # \end{pmatrix} = # \begin{pmatrix} # 1 & 2 & 3 & 4 \\ # 5 & 6 & 7 & 8 \\ # 9 & 10 & 11 & 12 # \end{pmatrix} # $$ # In[2]: matrix = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]] m = list(zip(*matrix)) print(m) # m es una lista de tuplas print() for i in range(len(m)): print(*m[i]) # Su transpuesta es $A^{t}$ de dimensión 4×3. # $$A^{t} = # \begin{pmatrix} # 1 & 5 & 9 \\ # 2 & 6 & 10 \\ # 3 & 7 & 11 \\ # 4 & 8 & 12 # \end{pmatrix} # $$ # ### Transposición de una matriz permutando filas y columnas # * Generamos la matriz m de números aleatorios, de dimensión 4x5 # * Son 4 filas y 5 columnas # * Imprimimos m # * Inicializamos la matriz transpuesta t de dimensión 5x4 # * Para crear t Invertimos las filas y columnas de m # * Imprimimos la matriz transpuesta t # In[3]: # Transponer matrices from random import seed, randint seed() # inicializamos la matriz m de dimensines 4x5 m = [[None]*5 for _ in range(4)] # generamos aleatoriamente la matriz m for i in range(4): for j in range(5): m[i][j] = randint(1,9) # imprimimos la matriz m for i in range(4): for j in range(5): print(m[i][j],end=" ") print() # inicializamos la matriz transpuesta t t = [[None]*len(m) for _ in range(len(m[0]))] for i in range(5): for j in range(4): t[i][j] = m[j][i] print() for i in range(5): # esta forma de imprimir una matriz print(*t[i]) # es más sencilla que la anterior # ## Copia de matriz 2D # Podemos copiar una matriz de dos dimensiones sin necesidad de llamar a la librería copy para usar la función deepcopy. # In[4]: from random import seed, randint seed() # inicializamos la matriz m de dimensines 4x4 m = [[None]*4 for _ in range(4)] # generamos aleatoriamente la matriz m for i in range(4): for j in range(4): m[i][j] = randint(1,9) # imprimimos la matriz m print("Matriz m") for i in range(4): for j in range(4): print(m[i][j],end=" ") print() print() # creamos la matriz cm que es una copia de m cm = [row[:] for row in m] # alteramos el primer valor de m m[0][0] = 0 # imprimimos m con su alteración print("Matriz m con el primer valor alterado") for i in range(4): # este sistema es mejor print(*m[i]) # para imprimir una matriz sin comas ni corchetes print() # imprimimos la copia y vemos que no se ha alterado print("La matriz copia de m es independiente, no tiene el valor alterado") for i in range(4): print(*cm[i])