Exemplo Prático - Quantização Vetorial
Vamos aplicar o broadcasting a um problema prático. A Quantização Vetorial (VQ) é uma técnica usada em compressão de dados e classificação. Um passo fundamental é encontrar o vetor "código" mais próximo de um "codebook" para um dado vetor de "observação". O broadcasting torna este cálculo eficiente.
Imagine que temos uma observação (por exemplo, peso e altura de um atleta) e um codebook de diferentes tipos de atletas. Queremos descobrir a qual tipo nossa observação é mais próxima.
Substitua o código em broadcasting.py pelo seguinte:
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)
Execute o script no seu terminal:
python broadcasting.py
A saída mostrará as distâncias ao quadrado da observação para cada código e identificará o vetor código correspondente mais próximo. Todo este cálculo foi realizado sem nenhum loop explícito em Python, graças ao broadcasting.
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.]