Ejercicio: 3Eva2015TII_T3 funciones matrices rotar, extraer

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]]