Introdução
Neste projeto, você aprenderá como implementar a função de distância de Minkowski, uma métrica de distância generalizada que inclui medidas de distância comumente usadas, como as distâncias euclidiana e Manhattan. Você também aprenderá como testar e refinar a função, bem como como integrá-la em um projeto maior.
🎯 Tarefas
Neste projeto, você aprenderá:
- Como implementar a função de distância de Minkowski em Python
- Como testar a função de distância de Minkowski com diferentes parâmetros de entrada
- Como refinar a função de distância de Minkowski para lidar com casos extremos (edge cases)
- Como integrar a função de distância de Minkowski em um projeto maior
🏆 Conquistas
Após concluir este projeto, você será capaz de:
- Calcular as distâncias de Minkowski entre dois pontos
- Lidar com diferentes tipos de parâmetros de entrada para a função de distância de Minkowski
- Testar e refinar uma função para melhorar sua robustez
- Integrar uma função personalizada em um projeto maior
Implementar a Função de Distância de Minkowski
Nesta etapa, você aprenderá como implementar a função de distância de Minkowski em Python. Siga as etapas abaixo para concluir esta etapa:
Abra o arquivo minkowski_distance.py no seu editor de código.
Implemente a função minkowski_distance com a seguinte lógica:
from typing import List, Union
import numpy as np
def minkowski_distance(
point_a: List[float], point_b: List[float], p: Union[int, str]
) -> float:
"""
Calcular a distância de Minkowski entre dois pontos.
Esta função calcula a distância de Minkowski entre dois pontos representados como listas
de valores numéricos. A distância de Minkowski é uma generalização de outras métricas de distância
como as distâncias euclidiana e Manhattan.
Parâmetros:
- point_a (List[float]): As coordenadas do primeiro ponto.
- point_b (List[float]): As coordenadas do segundo ponto.
- p (Union[int, str]): O parâmetro expoente para o cálculo da distância de Minkowski.
- Se p for um inteiro maior ou igual a 1, a distância p-norm é calculada.
- Se p for 'INF', a distância infinito-norm (Chebyshev) é calculada.
Retorna:
- float: A distância de Minkowski entre os dois pontos. Se um valor inválido de p for
fornecido, ele retorna -1.
"""
if isinstance(p, int) and p >= 1:
distance = np.power(
np.sum(np.abs(np.array(point_a) - np.array(point_b)) ** p), 1 / p
)
elif p == "INF":
distance = np.max(np.abs(np.array(point_a) - np.array(point_b)))
else:
distance = -1
return float(distance)
Explicação
Primeiro, importamos os módulos necessários.
Em seguida, definimos a função minkowski_distance que recebe três parâmetros: point_a, point_b e p.
A função calcula a distância de Minkowski:
- Se
pfor um inteiro maior ou igual a 1, ela calcula a distância p-norm usando a fórmula: [ \text{distance} = \left( \sum \left| \text{point_a} - \text{point_b} \right|^p \right)^{1/p} ] - Se
pfor "INF", ela calcula a distância infinito-norm (Chebyshev) usando a fórmula: [ \text{distance} = \max \left| \text{point_a} - \text{point_b} \right| ] - Se
pnão for válido, ela retorna-1.0.
Testar a Função de Distância de Minkowski
Nesta etapa, você testará a função minkowski_distance com diferentes parâmetros de entrada. Siga as etapas abaixo para concluir esta etapa:
Abra o arquivo minkowski_distance.py no seu editor de código.
Adicione os seguintes casos de teste no final do arquivo:
if __name__ == "__main__":
a = [1, 0]
b = [2, 0]
p = 2
distance = minkowski_distance(a, b, p)
print(f"{a=}, {b=}, {p=}, {distance=}") ## Expected output: a=[1, 0], b=[2, 0], p=2, distance=1.0
a = [4, 9, 10]
b = [2, 0, -3]
p = "INF"
distance = minkowski_distance(a, b, p)
print(f"{a=}, {b=}, {p=}, {distance=}") ## Expected output: a=[4, 9, 10], b=[2, 0, -3], p=INF, distance=13.0
a = [1, 4, 10, 0]
b = [20, -3, -5, 0]
p = -10
distance = minkowski_distance(a, b, p)
print(f"{a=}, {b=}, {p=}, {distance=}") ## Expected output: a=[1, 4, 10, 0], b=[20, -3, -5, 0], p=-10, distance=-1.0
Execute o arquivo minkowski_distance.py usando o seguinte comando:
python minkowski_distance.py
Verifique se a saída corresponde aos resultados esperados:
- Para os pontos
a = [1, 0]eb = [2, 0]comp = 2, a distância deve ser1.0. - Para os pontos
a = [4, 9, 10]eb = [2, 0, -3]comp = "INF", a distância deve ser13.0. - Para os pontos
a = [1, 4, 10, 0]eb = [20, -3, -5, 0]comp = -10, a distância deve ser-1.0.
Resumo
Parabéns! Você concluiu este projeto. Você pode praticar mais laboratórios no LabEx para aprimorar suas habilidades.



