Implémentation de la métrique de distance de Minkowski

PythonPythonBeginner
Pratiquer maintenant

💡 Ce tutoriel est traduit par l'IA à partir de la version anglaise. Pour voir la version originale, vous pouvez cliquer ici

Introduction

Dans ce projet, vous allez apprendre à implémenter la fonction de distance de Minkowski, une métrique de distance généralisée qui inclut des mesures de distance couramment utilisées telles que les distances euclidienne et manhattanienne. Vous allez également apprendre à tester et à affiner la fonction, ainsi qu'à l'intégrer dans un projet plus important.

🎯 Tâches

Dans ce projet, vous allez apprendre :

  • Comment implémenter la fonction de distance de Minkowski en Python
  • Comment tester la fonction de distance de Minkowski avec différents paramètres d'entrée
  • Comment affiner la fonction de distance de Minkowski pour gérer les cas limites
  • Comment intégrer la fonction de distance de Minkowski dans un projet plus important

🏆 Réalisations

Après avoir terminé ce projet, vous serez capable de :

  • Calculer les distances de Minkowski entre deux points
  • Gérer différents types de paramètres d'entrée pour la fonction de distance de Minkowski
  • Tester et affiner une fonction pour améliorer sa robustesse
  • Intégrer une fonction personnalisée dans un projet plus important

Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL python(("Python")) -.-> python/ControlFlowGroup(["Control Flow"]) python(("Python")) -.-> python/DataStructuresGroup(["Data Structures"]) python(("Python")) -.-> python/FunctionsGroup(["Functions"]) python(("Python")) -.-> python/PythonStandardLibraryGroup(["Python Standard Library"]) python/ControlFlowGroup -.-> python/conditional_statements("Conditional Statements") python/DataStructuresGroup -.-> python/lists("Lists") python/FunctionsGroup -.-> python/function_definition("Function Definition") python/PythonStandardLibraryGroup -.-> python/math_random("Math and Random") subgraph Lab Skills python/conditional_statements -.-> lab-373572{{"Implémentation de la métrique de distance de Minkowski"}} python/lists -.-> lab-373572{{"Implémentation de la métrique de distance de Minkowski"}} python/function_definition -.-> lab-373572{{"Implémentation de la métrique de distance de Minkowski"}} python/math_random -.-> lab-373572{{"Implémentation de la métrique de distance de Minkowski"}} end

Implémentez la fonction de distance de Minkowski

Dans cette étape, vous allez apprendre à implémenter la fonction de distance de Minkowski en Python. Suivez les étapes ci-dessous pour terminer cette étape :

Ouvrez le fichier minkowski_distance.py dans votre éditeur de code.

Implémentez la fonction minkowski_distance avec la logique suivante :

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:
    """
    Calcule la distance de Minkowski entre deux points.

    Cette fonction calcule la distance de Minkowski entre deux points représentés sous forme de listes de valeurs numériques. La distance de Minkowski est une généralisation d'autres métriques de distance telles que les distances euclidienne et manhattanienne.

    Paramètres :
    - point_a (List[float]) : Les coordonnées du premier point.
    - point_b (List[float]) : Les coordonnées du second point.
    - p (Union[int, str]) : Le paramètre d'exposant pour le calcul de la distance de Minkowski.
      - Si p est un entier supérieur ou égal à 1, la distance de p-norme est calculée.
      - Si p est 'INF', la distance de norme infinie (Chebyshev) est calculée.

    Retourne :
    - float : La distance de Minkowski entre les deux points. Si une valeur invalide de p est fournie, elle retourne -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)

Explications

Tout d'abord, nous importons les modules nécessaires.

Ensuite, définissons la fonction minkowski_distance qui prend trois paramètres : point_a, point_b et p.

La fonction calcule la distance de Minkowski :

  • Si p est un entier supérieur ou égal à 1, elle calcule la distance de p-norme en utilisant la formule :
    [
    \text{distance} = \left( \sum \left| \text{point_a} - \text{point_b} \right|^p \right)^{1/p}
    ]
  • Si p est "INF", elle calcule la distance de norme infinie (Chebyshev) en utilisant la formule :
    [
    \text{distance} = \max \left| \text{point_a} - \text{point_b} \right|
    ]
  • Si p n'est pas valide, elle retourne -1,0.
✨ Vérifier la solution et pratiquer

Testez la fonction de distance de Minkowski

Dans cette étape, vous allez tester la fonction minkowski_distance avec différents paramètres d'entrée. Suivez les étapes ci-dessous pour terminer cette étape :

Ouvrez le fichier minkowski_distance.py dans votre éditeur de code.

Ajoutez les cas de test suivants à la fin du fichier :

if __name__ == "__main__":
    a = [1, 0]
    b = [2, 0]
    p = 2
    distance = minkowski_distance(a, b, p)
    print(f"{a=}, {b=}, {p=}, {distance=}")  ## Sortie attendue : 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=}")  ## Sortie attendue : 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=}")  ## Sortie attendue : a=[1, 4, 10, 0], b=[20, -3, -5, 0], p=-10, distance=-1.0

Exécutez le fichier minkowski_distance.py en utilisant la commande suivante :

python minkowski_distance.py

Vérifiez que la sortie correspond aux résultats attendus :

  • Pour les points a = [1, 0] et b = [2, 0] avec p = 2, la distance devrait être 1.0.
  • Pour les points a = [4, 9, 10] et b = [2, 0, -3] avec p = "INF", la distance devrait être 13.0.
  • Pour les points a = [1, 4, 10, 0] et b = [20, -3, -5, 0] avec p = -10, la distance devrait être -1.0.
✨ Vérifier la solution et pratiquer

Sommaire

Félicitations ! Vous avez terminé ce projet. Vous pouvez pratiquer plus de laboratoires sur LabEx pour améliorer vos compétences.