Implementierung der Minkowski-Distanzmetrik

PythonBeginner
Jetzt üben

Einführung

In diesem Projekt lernst du, wie du die Minkowski-Distanzfunktion implementierst, eine verallgemeinerte Distanzmetrik, die übliche Distanzmaße wie die euklidische und die Manhattan-Distanz umfasst. Du wirst auch lernen, wie du die Funktion testest und verfeinern kannst, sowie wie du sie in ein größeres Projekt integrierst.

🎯 Aufgaben

In diesem Projekt wirst du lernen:

  • Wie du die Minkowski-Distanzfunktion in Python implementierst
  • Wie du die Minkowski-Distanzfunktion mit verschiedenen Eingabeparametern testest
  • Wie du die Minkowski-Distanzfunktion verfeinern, um Randfälle zu behandeln
  • Wie du die Minkowski-Distanzfunktion in ein größeres Projekt integrierst

🏆 Errungenschaften

Nach Abschluss dieses Projekts wirst du in der Lage sein:

  • Minkowski-Distanzen zwischen zwei Punkten zu berechnen
  • Verschiedene Arten von Eingabeparametern für die Minkowski-Distanzfunktion zu behandeln
  • Eine Funktion zu testen und zu verfeinern, um ihre Robustheit zu verbessern
  • Eine benutzerdefinierte Funktion in ein größeres Projekt zu integrieren

Implementiere die Minkowski-Distanzfunktion

In diesem Schritt lernst du, wie du die Minkowski-Distanzfunktion in Python implementierst. Folge den Schritten unten, um diesen Schritt abzuschließen:

Öffne die Datei minkowski_distance.py in deinem Code-Editor.

Implementiere die minkowski_distance-Funktion mit folgender Logik:

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:
    """
    Berechne die Minkowski-Distanz zwischen zwei Punkten.

    Diese Funktion berechnet die Minkowski-Distanz zwischen zwei Punkten, die als Listen von numerischen Werten dargestellt werden. Die Minkowski-Distanz ist eine Verallgemeinerung anderer Distanzmaße wie der euklidischen und der Manhattan-Distanz.

    Parameter:
    - point_a (List[float]): Die Koordinaten des ersten Punkts.
    - point_b (List[float]): Die Koordinaten des zweiten Punkts.
    - p (Union[int, str]): Der Exponentenparameter für die Minkowski-Distanzberechnung.
      - Wenn p eine ganze Zahl größer oder gleich 1 ist, wird die p-Norm-Distanz berechnet.
      - Wenn p 'INF' ist, wird die Unendlichkeits-Norm (Chebyshev) Distanz berechnet.

    Rückgabe:
    - float: Die Minkowski-Distanz zwischen den zwei Punkten. Wenn ein ungültiger Wert von p angegeben wird, wird -1 zurückgegeben.
    """

    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)

Erklärung

Zunächst importieren wir die erforderlichen Module.

Dann definieren wir die minkowski_distance-Funktion, die drei Parameter akzeptiert: point_a, point_b und p.

Die Funktion berechnet die Minkowski-Distanz:

  • Wenn p eine ganze Zahl größer oder gleich 1 ist, berechnet sie die p-Norm-Distanz mit der Formel:
    [ \text{distance} = \left( \sum \left| \text{point_a} - \text{point_b} \right|^p \right)^{1/p} ]
  • Wenn p "INF" ist, berechnet sie die Unendlichkeits-Norm (Chebyshev) Distanz mit der Formel: [ \text{distance} = \max \left| \text{point_a} - \text{point_b} \right| ]
  • Wenn p nicht gültig ist, gibt sie -1.0 zurück.

Teste die Minkowski-Distanzfunktion

In diesem Schritt wirst du die minkowski_distance-Funktion mit verschiedenen Eingabeparametern testen. Folge den Schritten unten, um diesen Schritt abzuschließen:

Öffne die Datei minkowski_distance.py in deinem Code-Editor.

Füge die folgenden Testfälle am Ende der Datei hinzu:

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

Führe die Datei minkowski_distance.py mit dem folgenden Befehl aus:

python minkowski_distance.py

Verifiziere, dass die Ausgabe mit den erwarteten Ergebnissen übereinstimmt:

  • Für die Punkte a = [1, 0] und b = [2, 0] mit p = 2 sollte die Distanz 1.0 betragen.
  • Für die Punkte a = [4, 9, 10] und b = [2, 0, -3] mit p = "INF" sollte die Distanz 13.0 betragen.
  • Für die Punkte a = [1, 4, 10, 0] und b = [20, -3, -5, 0] mit p = -10 sollte die Distanz -1.0 betragen.

Zusammenfassung

Herzlichen Glückwunsch! Du hast dieses Projekt abgeschlossen. Du kannst in LabEx weitere Übungen absolvieren, um deine Fähigkeiten zu verbessern.

✨ Lösung prüfen und üben✨ Lösung prüfen und üben