Exemple pratique - Quantification vectorielle
Appliquons la diffusion à un problème pratique. La Quantification Vectorielle (VQ) est une technique utilisée dans la compression de données et la classification. Une étape clé consiste à trouver le vecteur "code" le plus proche d'un "codebook" (dictionnaire de codes) pour un vecteur "observation" donné. La diffusion rend ce calcul efficace.
Imaginons que nous ayons une observation (par exemple, le poids et la taille d'un athlète) et un codebook de différents types d'athlètes. Nous voulons trouver à quel type notre observation est la plus proche.
Remplacez le code de votre fichier broadcasting.py par le suivant :
import numpy as np
## An observation vector (e.g., weight, height)
observation = np.array([111.0, 188.0])
## A codebook of vectors
codes = np.array([[102.0, 203.0],
[132.0, 193.0],
[45.0, 155.0],
[57.0, 173.0]])
## Use broadcasting to subtract the observation from all codes at once
## observation (2,) is broadcast to (4, 2)
diff = codes - observation
## Calculate the squared Euclidean distance
dist_sq = np.sum(diff**2, axis=-1)
## Find the index of the minimum distance
closest_index = np.argmin(dist_sq)
## Get the closest code from the codebook
closest_code = codes[closest_index]
print("Observation:", observation)
print("Codebook:\n", codes)
print("Distances squared:", dist_sq)
print("Closest code index:", closest_index)
print("Closest code:", closest_code)
Exécutez le script dans votre terminal :
python broadcasting.py
La sortie affichera les distances au carré entre l'observation et chaque code, et identifiera le vecteur code correspondant le plus proche. L'ensemble de ce calcul a été effectué sans aucune boucle Python explicite, grâce à la diffusion.
Observation: [111. 188.]
Codebook:
[[102. 203.]
[132. 193.]
[ 45. 155.]
[ 57. 173.]]
Distances squared: [ 306. 466. 5445. 3141.]
Closest code index: 0
Closest code: [102. 203.]