s3Eva2015TII_T3 funciones matrices rotar, extraer

Ejercicio: 3Eva2015TII_T3 funciones matrices rotar, extraer

rotar matriz

literal a

Si se usa la matriz del ejemplo, se convierte en arreglo. Luego se crea una matriz de las mismas dimensiones (n,m) intercambiadas (m,n).

import numpy as np
matriz = [[0,4,0],
          [5,6,7]]
matriz = np.array(matriz)

n,m = matriz.shape
tabla = np.zeros(shape=(m,n),dtype=int)

La rotación inicia copiando cada valor de casilla i,j en la posición f,c determinada por:

f = j
c = (n-1)-i
tabla[f,c] = matriz[i,j]

Por lo que se usan todas las combinaciones de fila,columna de la matriz dada usando bucles para recorrer la matriz.

    i = 0   # inicia rotación
    while not(i>=n):
        j = 0
        while not(j>=m):
            f = j
            c = (n-1)-i
            tabla[f,c] = matriz[i,j]
            j = j + 1
        i = i + 1

Luego se realizan tantas rotaciones según el valor dado en k usando otro bucle que cuenta las rotaciones.

literal b

De forma semejante al literal anterior, la matriz recibida se convierte a un arreglo. Para el resultado se crea otra matriz de tamaño (t,t)

matriz = np.array(matriz)
n,m = matriz.shape
esquina = np.zeros(shape=(t,t), dtype=int)

Para luego determinar las coordenadas f,c de la esquina requerida mediante k.

if (k==0): # superior izquierda
    f = i
    c = j
if (k==1): # superior derecha
    f = i
    c = (m-t)+j
if (k==2): # inferior derecha
    f = (n-t)+i
    c = (m-t)+j
if (k==3): # inferior izquierda
    f = (n-t)+i
    c = j

La copia de las casillas se limita por la variable t.

Ejemplo:

matriz = [[0,4,0],
          [5,6,7]]
>>extraeresquina(matriz,1,2)
[[4 0]
[6 7]]

Algoritmo en Python

Tarea: Integrar con tema 4

# 3Eva2015TII_T3 funciones matrices rotar, extraer
# version con lazos y condicionales. 
# tarea: simplificar lazos con 'for'
import numpy as np

# literal a
def rotando(matriz,k):
    matriz = np.array(matriz)
    
    cuenta = 0  #cuenta rotaciones
    while not(cuenta>=k):
        n,m = matriz.shape
        tabla = np.zeros(shape=(m,n),dtype=int)
        
        i = 0   # inicia rotación
        while not(i>=n):
            j = 0
            while not(j>=m):
                f = j
                c = (n-1)-i
                tabla[f,c] = matriz[i,j]
                j = j + 1
            i = i + 1
        
        matriz = np.copy(tabla)
        cuenta = cuenta + 1
    return(matriz)

# literal b
def extraeresquina(matriz,k,t):
    matriz = np.array(matriz)
    n,m = matriz.shape
    esquina = np.zeros(shape=(t,t), dtype=int)
    i = 0
    while not(i>=t):
        j = 0
        while not(j>=t):
            if (k==0): # superior izquierda
                f = i
                c = j
            if (k==1): # superior derecha
                f = i
                c = (m-t)+j
            if (k==2): # inferior derecha
                f = (n-t)+i
                c = (m-t)+j
            if (k==3): # inferior izquierda
                f = (n-t)+i
                c = j
            esquina[i,j]=matriz[f,c]
            j = j+1
        i = i+1   
    return(esquina)

# PROGRAMA PRUEBA -----
matriz = [[0,4,0],
          [5,6,7]]
print(np.array(matriz))
print('rotando:')
print(rotando(matriz,3))
print('esquina')
print(extraeresquina(matriz,1,2))
>>>
[[0 4 0]
 [5 6 7]]
rotando:
[[0 7]
 [4 6]
 [0 5]]
esquina
[[4 0]
 [6 7]]

Ejercicios resueltos/Ejemplos por año

Ejemplos 1ra Evaluación

1ra Eva 2020-2011

1ra Eva 2010-2001

Ejemplos 2da Evaluación

2da Eva 2020-2011

2da Eva 2010-2001

Ejemplos 3ra Evaluación

3ra Eva 2020-2011

3ra Eva 2010-2001