El producto escalar compara dos vectores
El producto escalar es un número que dice cuánto apuntan dos vectores en la misma dirección. Se calcula multiplicando componente a componente y sumando los resultados.
Con él puedes decir si dos personas tienen gustos parecidos o si dos textos hablan de lo mismo. Al acabar sabrás calcularlo y comparar vectores con la similitud coseno.
Al final de esta lección
Nota
Puedo usar el producto escalar para decir cuánto se parecen dos vectores.
Palabras clave
| Palabra | Qué significa |
|---|---|
| Producto escalar | multiplicar componente a componente y sumar |
| Ángulo | lo abierta que es la separación entre dos vectores |
| Perpendicular | que forma un ángulo recto con otro |
| Similitud coseno | el producto escalar dividido entre las dos longitudes |
| Longitud | lo grande que es un vector |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
El producto escalar multiplica y suma
Para calcular el producto escalar de dos vectores, multiplica las componentes que ocupan el mismo sitio y suma todos esos productos. El resultado es un solo número, no un vector.
Ejemplo: tres personas dan una valoración de 0 a 5 a cuatro cafeterías. Cuanto más coinciden en las cafeterías que les gustan, mayor es el producto.
Ejemplo resuelto: el producto escalar de dos personas
| Cafetería | Ana | Beto | Producto |
|---|---|---|---|
| Plaza | 5 | 4 | 5 por 4 = 20 |
| Mercado | 3 | 3 | 3 por 3 = 9 |
| Estación | 0 | 0 | 0 |
| Campus | 1 | 0 | 0 |
| Total | 20 + 9 + 0 + 0 = 29 |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Calcula el producto escalar con un bucle
# Valoraciones de 0 a 5 que dan dos personas a cuatro cafeterías.
ana = [5, 3, 0, 1]
beto = [4, 3, 0, 0]
total = 0
for i in range(len(ana)):
total = total + ana[i] * beto[i]
print("producto escalar:", total)
# Cambia la última valoración de Beto a 5 y vuelve a ejecutar.
# ¿Sube o baja el producto escalar? ¿Cuánto?
Tres productos escalares con NumPy
docker exec jupyter python3 -c "import numpy as np; a=np.array([5,3,0,1]); b=np.array([4,3,0,0]); c=np.array([0,1,5,4]); print(a@b, a@c, b@c)"Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
El signo del producto dice hacia dónde apuntan
Si dos vectores apuntan casi igual, el producto es grande y positivo. Si forman un ángulo recto, es cero: se dice que son perpendiculares. Si apuntan en sentidos contrarios, es negativo.
[1, 0] y [0, 5] son perpendiculares: uno va hacia la derecha y el otro hacia arriba. Su producto es 1 por 0 más 0 por 5, es decir, 0.
La similitud coseno ignora la longitud
El producto escalar crece si los vectores son largos, aunque apunten distinto. Para comparar solo la dirección, divide entre las dos longitudes. Es la similitud coseno.
Vale 1 si apuntan igual, 0 si son perpendiculares y -1 si son opuestos. Así [2, 1, 0] y [4, 2, 0] dan 1: el segundo es el primero estirado.
Ejemplo resuelto: la similitud coseno de Ana
| Pareja | Producto escalar | Longitudes | Coseno |
|---|---|---|---|
| Ana y Beto | 29 | 5,916 y 5 | 29 / (5,916 por 5) = 0,98 |
| Ana y Carla | 7 | 5,916 y 6,481 | 7 / (5,916 por 6,481) = 0,183 |
| Beto y Carla | 3 | 5 y 6,481 | 3 / (5 por 6,481) = 0,093 |
Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.
Calcula las tres similitudes coseno
docker exec jupyter python3 -c "import numpy as np; a=np.array([5,3,0,1]); b=np.array([4,3,0,0]); c=np.array([0,1,5,4]); n=np.linalg.norm; print(round(a@b/(n(a)*n(b)),3), round(a@c/(n(a)*n(c)),3), round(b@c/(n(b)*n(c)),3))"Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Un error muy común
Advertencia
Mucha gente cree que un producto escalar grande significa que dos vectores se parecen mucho. No siempre. [100, 100] y [1, 0] dan 100 solo porque el primero es largo. Usa la similitud coseno cuando quieras comparar la dirección y no el tamaño.
Para ir más lejos: textos como vectores
Un texto se puede convertir en un vector que cuenta cuántas veces aparece cada palabra. Dos textos que hablan de lo mismo dan un coseno cercano a 1.
Escribe dos frases cortas sobre tu comedor y cuenta a mano las palabras que comparten. Después calcula el coseno con la tabla de arriba como guía.