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
peine 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
pnicht gültig ist, gibt sie-1.0zurü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]undb = [2, 0]mitp = 2sollte die Distanz1.0betragen. - Für die Punkte
a = [4, 9, 10]undb = [2, 0, -3]mitp = "INF"sollte die Distanz13.0betragen. - Für die Punkte
a = [1, 4, 10, 0]undb = [20, -3, -5, 0]mitp = -10sollte die Distanz-1.0betragen.
Zusammenfassung
Herzlichen Glückwunsch! Du hast dieses Projekt abgeschlossen. Du kannst in LabEx weitere Übungen absolvieren, um deine Fähigkeiten zu verbessern.



