<jupyter_start><jupyter_text>MAT281 - 2° Semestre 2020            Profesor: <NAME><jupyter_code>import numpy as np<jupyter_output><empty_output><jupyter_text>Problema 01 La función ```SMA()``` queda de la siguiente forma:<jupyter_code>def SMA(Array,Numero):
    stop = np.shape(Array)[0] - Numero + 1   #es para detenernos en ese punto, y no iterar demás 
    AF = [np.cumsum(Array[i:i + Numero],dtype=float)[Numero - 1] / Numero for i in range(0,stop)] #Aca ponemos cada 
                                                                                            #media  considerando el 
                                                                            #largo Numero para volverlo un array
    return np.array(AF)  #Finalmente lo volvemos un arreglo
a = np.array([5,3,8,10,2,1,5,1,0,2])
SMA(a,2)<jupyter_output><empty_output><jupyter_text>Problema 02 Para este función, debemos notar que en algunos casos puede quedar la ultima fila con menos elementos que el numero de columnas, de ser este el caso se eliminará la ultima fila, es decir, hay casos en que la matriz no tendrá todos los elementos del arreglo.Pensando en ello, así queda la funcion ```Strides()```.<jupyter_code>def Strides(Arreglo, Columnas, Desfase):
    largo = np.shape(Arreglo)[0]    #Obtenemos el largo del arreglo
    Matriz = []
    for i in range(0,largo - Desfase, Columnas - Desfase): #Avanzamos acorde al desfase
        if i + Columnas < largo:                    #Aquí restringimos para que no ocurra
            Matriz.append(Arreglo[i:i + Columnas])  #lo descrito antes y se agrega la fila
                                                    #junto el desfase
    return np.array(Matriz)  #Finalmente lo volvemos un arreglo
b = np.array([1,2,3,4,5,6,7,8,9,10])
Strides(b,4,2)<jupyter_output><empty_output><jupyter_text>Problema 03 Para la función ```EsCuadradoMagico()``` se crea la función ```EsCuaYSonCon()```, para verificar si cumple con que es cuadrada y si los numeros en la matriz son consecutivos del 1 al $n^2$. Finalmente, ambas funciones quedan de la siguiente manera:<jupyter_code>def EsCuaYSonCon(Matrix):
    n,m = np.shape(Matrix)
    if n != m:
        return False      #Aquí vemos si es una matriz cuadrada
    for i in range(1,n ** 2 + 1):   #Con esto vemos si están todos los numeros consecutivamente del 1 al n cuadrado
        if i not in Matrix:
            return False
    return True

def EsCuadradoMagico(Matrix):
    if EsCuaYSonCon(Matrix) == False:   #Vemos si se cumple o no lo pedido 
        return False                    #(Matriz cuadrada + numeros consecutivos del 1 al n cuadrado)
    n,m = np.shape(Matrix)
    SumasF, SumasC = Matrix.sum(axis = 1), Matrix.sum(axis = 0) #Arreglos con la suma de cada fila y columna
    SumaD1, SumaD2 = sum(Matrix.diagonal()), sum(np.fliplr(Matrix).diagonal()) #Suma de la diagonal a la der e izq
    if SumaD1 == SumaD2:
        for i in range(0,n):
            if SumasF[i] != SumaD1 and SumasC[i] != SumaD1:  #Verificamos si se cumple que es cuadrado magico o no
                return False
        return True
    return False
A = np.array([[4,9,2],[3,5,7],[8,1,6]])
B = np.array([[4,2,9],[3,5,7],[8,1,6]])
print(EsCuadradoMagico(A))
print(EsCuadradoMagico(B))<jupyter_output>True
False
{'fraction_non_alphanumeric': 0.10251688152240639, 'fraction_numerical': 0.024248004910988337, 'mean_word_length': 2.7546082949308754, 'pattern_counts': {'":': 0, '<': 18, '<?xml version=': 0, '>': 17, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 9, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '4', 'dir': 'jupyter-structured-clean-dedup', 'id': '513101', 'license': 'MIT', 'n_tokens_mistral': 1171, 'n_tokens_neox': 1134, 'n_words': 347, 'path': 'Labs/Laboratorio-02.ipynb', 'repo_name': 'PabloCalcumil/mat281_portafolio', 'size': '3275'}