"""
Clase 11 - Conexión de NumPy con Pandas y Matplotlib para Análisis de Datos
Ejercicios NumPy
"""
import numpy as np
# (1) Operaciones Básicas con Arrays
# Instrucción
# Crea dos arrays de 1D con valores enteros.
a = np.array([1, 3, 5, 7, 9])
b = np.array([2, 4, 6, 8, 10])
# realiza las operaciones de suma, resta, multiplicación, y división entre ellos
sum = a + b
res = a - b
mul = a * b
div = a / b
print("### (1) ###")
print("Array a:", a) # Array a: [1 3 5 7 9]
print("Array b:", b) # Array b: [ 2 4 6 8 10]
print("Suma:", sum) # Suma: [ 3 7 11 15 19]
print("Resta:", res) # Resta: [-1 -1 -1 -1 -1]
print("Multiplicación", mul) # Multiplicación [ 2 12 30 56 90]
print("Division:", div) # Division: [0.5 0.75 0.833 0.875 0.9]
# (2) Cálculos Estadísticos en Arrays
# Instrucción: Dado un array de datos, calcula la media, mediana, varianza, y desviación estándar.
media = np.mean(a)
mediana = np.median(a)
varianza = np.var(a)
desviacion_e = np.std(a)
print("### (2) ###")
print("Array a:", a) # Array a: [1 3 5 7 9]
print("Mediana / Promedio:", media) # Mediana / Promedio: 5.0
print("Mediana:", mediana) # Mediana: 5.0
print("Varianza", varianza) # Varianza 8.0
print("Desviación estandar:", desviacion_e) # Desviación estandar: 2.8284271247461903
# (3) Operaciones Matriciales
# Instrucción: Crea dos matrices de 2x2
matriz_a = np.array([[1, 3],[5, 7]])
matriz_b = np.array([[2, 4],[6, 8]])
print("Matriz a:\n", matriz_a)
# Matriz a:
# [[1 3]
# [5 7]]
print("Matriz b:\n", matriz_b)
# Matriz b:
# [[2 4]
# [6 8]]
# realiza las operaciones de suma, resta, multiplicación (producto matricial) y cálculo de la inversa de una de ellas.
sum_m = matriz_a + matriz_b
res_m = matriz_a - matriz_b
mul_m = np.dot(matriz_a, matriz_b)
inv_m_a = np.linalg.inv(matriz_a)
inv_m_b = np.linalg.inv(matriz_b)
print("Suma M:\n", sum_m)
# Suma M:
# [[ 3 7]
# [11 15]]
print("Resta M:\n", res_m)
# Resta M:
# [[-1 -1]
# [-1 -1]]
print("Multiplicación M:\n", mul_m)
# Multiplicación M:
# [[20 28]
# [52 76]]
print("Inverza M_a:\n", inv_m_a)
# Inverza M_a:
# [[-0.875 0.375]
# [ 0.625 -0.125]]
print("Inverza M_b:\n", inv_m_b)
# Inverza M_b:
# [[-1. 0.5 ]
# [ 0.75 -0.25]]
# (4) Resolución de un Sistema de Ecuaciones Lineales
# Instrucción: Resuelve el sistema de ecuaciones lineales dado por Ax=b, donde A es una matriz 2x2 y b es un vector de 2 elementos.
# linalg.solve: Resuelve una ecuación matricial lineal, o un sistema de ecuaciones escalares lineales.
A = np.array([[2, 4],[6, 8]])
b = np.array([1, 3])
x = np.linalg.solve(A,b)
print("Solución ecuación lineal Ax=b:", x)
# Solución ecuación lineal Ax=b: [0.5 0. ]
# (5) Simulación de Datos
# Instrucción: Genera un array de 1000 números aleatorios que sigan una distribución normal con media 0 y desviación estándar 1.
# random.normal(loc=0.0, scale=1.0, size=None)
# loc = Media ("centro") de la distribución
# scale = Desviación estándar (dispersión o "ancho") de la distribución
# size = Forma de salida
datos_s = np.random.normal(0, 1, 1000)
print("Datos simulados:\n", datos_s)
# Calcula la media y desviación estándar del array generado.
med_datos_s = np.mean(datos_s)
dev_s_datos_s = np.std(datos_s)
print("Media Datos_S:", med_datos_s) # Media Datos_S: -0.011027245405171138
print("Desviación estandar Datos_S:", dev_s_datos_s) # Desviación estandar Datos_S: 0.9927456612022676