MAT281 - Laboratorio N°02: Computacion Numerica con NumPy¶
Objetivos del laboratorio¶
- Crear y manipular
ndarrayde una y dos dimensiones. - Aprovechar la vectorizacion y el broadcasting en lugar de ciclos de Python.
- Aplicar indexacion, slicing y mascaras booleanas.
- Calcular estadisticas y operaciones de algebra lineal con NumPy.
- Implementar una regresion lineal simple mediante minimos cuadrados.
Instrucciones¶
Lea con atencion cada problema antes de resolverlo. Reemplace cada celda que contiene # FIXME con su propia solucion y, cuando se solicite, responda las preguntas en celdas de texto.
Nota: Puede apoyarse en asistentes virtuales (ChatGPT, Gemini, Claude) o en el autocompletado de Colab, pero asegurese de entender cada linea de codigo que entregue.
import numpy as np
Problema 01 — Listas de Python vs arrays de NumPy¶
Tu tarea:
- Crea una lista de Python con los enteros del 0 al 9 y un array de NumPy
equivalente con
np.arange. - Multiplica cada elemento por 2 en ambos casos. Observa la diferencia: en
la lista necesitas un ciclo/
list comprehension; en el array bastaarr * 2. - Crea un array de
1_000_000numeros y eleva cada elemento al cuadrado. Comenta (en texto) por que la version vectorizada es preferible.
# FIXME
Problema 02 — Arrays especiales y reshape¶
Tu tarea: crea, sin escribir los valores a mano:
- Una matriz de ceros de tamaño $3\times 4$.
- Una matriz identidad $5\times 5$.
- Un vector con 9 numeros equiespaciados entre 0 y 2 (
np.linspace) y transformalo (reshape) en una matriz $3\times 3$. - Calcula la suma por filas y la suma por columnas de esa matriz
(usa el argumento
axis).
# FIXME
Problema 03 — Indexacion, slicing y mascaras booleanas¶
Dado el array x definido abajo:
Tu tarea:
- Extrae los elementos en posiciones pares (0, 2, 4, ...).
- Reemplaza todos los valores negativos por 0 (usa una mascara booleana).
- Cuenta cuantos elementos son mayores que la media del array.
rng = np.random.default_rng(42)
x = rng.integers(-10, 10, size=20)
print(x)
# FIXME
Problema 04 — Estadisticas y normalizacion¶
Dada la matriz de datos M (10 observaciones, 3 variables):
Tu tarea:
- Calcula media y desviacion estandar de cada columna.
- Estandariza la matriz (resta la media y divide por la desviacion de cada columna) usando broadcasting. Verifica que la media de cada columna quede $\approx 0$ y la desviacion $\approx 1$.
rng = np.random.default_rng(0)
M = rng.normal(loc=[5, 50, 100], scale=[1, 10, 25], size=(10, 3))
# FIXME
Problema 05 — Regresion lineal por minimos cuadrados¶
El modelo de regresion lineal simple ajusta una recta $\hat{y} = \beta_0 + \beta_1 x$. Las formulas cerradas de los estimadores de minimos cuadrados son:
$$ \beta_1 = \frac{\sum (x_i-\bar{x})(y_i-\bar{y})}{\sum (x_i-\bar{x})^2}, \qquad \beta_0 = \bar{y} - \beta_1 \bar{x} $$
Tu tarea: con los datos x, y de abajo:
Calcula $\beta_0$ y $\beta_1$ usando solo operaciones de NumPy.
Calcula las predicciones $\hat{y}$ y el coeficiente de determinacion
$$ R^2 = 1 - \frac{\sum (y_i - \hat{y}_i)^2}{\sum (y_i - \bar{y})^2}. $$
Verifica tu resultado con
np.polyfit(x, y, 1).
rng = np.random.default_rng(7)
x = np.linspace(0, 10, 50)
y = 2.5 * x + 1.0 + rng.normal(0, 2, size=x.size)
# FIXME
Respuesta: ¿que tan bien ajusta el modelo? Comenta el valor de $R^2$.