L2 (Euclídea)
La norma más común, inducida por el producto interno.
Capítulo 4
Un producto interno es una función bilineal, simétrica y definida positiva:
Para espacios de funciones: .
La norma más común, inducida por el producto interno.
Usada en LASSO y cuando queremos sparseza.
import numpy as np
x = np.array([3, -4])
print(f"||x||_1 = {np.linalg.norm(x, 1):.2f}") # 7
print(f"||x||_2 = {np.linalg.norm(x, 2):.2f}") # 5
print(f"||x||_∞ = {np.linalg.norm(x, np.inf):.2f}") # 4
# Matriz: norma de Frobenius
A = np.array([[1, 2], [3, 4]])
print(f"||A||_F = {np.linalg.norm(A, 'fro'):.2f}")El ángulo entre dos vectores está dado por el coseno:
Son ortogonales si .Ortonormales si además tienen norma 1.
import numpy as np
x = np.array([1, 0])
y = np.array([0, 1])
cos_theta = np.dot(x, y) / (np.linalg.norm(x) * np.linalg.norm(y))
print(f"cos(θ) = {cos_theta:.2f} → θ = {np.degrees(np.arccos(cos_theta)):.0f}°")
print("Ortogonales:", np.isclose(np.dot(x, y), 0))
# Base ortonormal: Q^T Q = I
Q = np.array([[1/np.sqrt(2), -1/np.sqrt(2)],
[1/np.sqrt(2), 1/np.sqrt(2)]])
print("Q^T Q:
", Q.T @ Q) # ≈ identidadLa proyección de sobre un vector es:
Sobre un subespacio con base ortonormal Q: .
import numpy as np
# Proyección de y sobre x
y = np.array([3, 4])
x = np.array([1, 2])
proj = np.dot(x, y) / np.dot(x, x) * x
print(f"Proyección: {proj}")
print(f"Residuo: {y - proj}")
print(f"Ortogonal: {np.dot(x, y - proj):.6f}") # ≈ 0
# Gram-Schmidt: ortogonalización
def gram_schmidt(V):
U = []
for v in V:
u = v.copy()
for w in U:
u -= np.dot(w, v) / np.dot(w, w) * w
if np.linalg.norm(u) > 1e-10:
U.append(u)
return np.array(U)
V = np.array([[1, 1, 0], [1, 0, 1], [0, 1, 1]], dtype=float)
U = gram_schmidt(V)
print("Base ortogonal:
", U)