Введение
В этом проекте вы научитесь реализовывать функцию Минковского расстояния, обобщенную метрику расстояния, которая включает в себя широко используемые меры расстояния, такие как евклидово и манхэттенское расстояния. Также вы научитесь тестировать и усовершенствовать функцию, а также как интегрировать ее в более крупный проект.
🎯 Задачи
В этом проекте вы научитесь:
- реализовывать функцию Минковского расстояния на Python
- тестировать функцию Минковского расстояния с разными входными параметрами
- усовершенствовать функцию Минковского расстояния для обработки граничных случаев
- интегрировать функцию Минковского расстояния в более крупный проект
🏆 Достижения
После завершения этого проекта вы сможете:
- вычислять расстояния Минковского между двумя точками
- обрабатывать разные типы входных параметров для функции Минковского расстояния
- тестировать и усовершенствовать функцию, чтобы повысить ее надежность
- интегрировать пользовательскую функцию в более крупный проект
Реализовать функцию расстояния Минковского
В этом шаге вы научитесь реализовывать функцию расстояния Минковского на Python. Следуйте шагам ниже, чтобы завершить этот шаг:
Откройте файл minkowski_distance.py в вашем редакторе кода.
Реализуйте функцию minkowski_distance с логикой, представленной ниже:
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:
"""
Вычисляет расстояние Минковского между двумя точками.
Эта функция вычисляет расстояние Минковского между двумя точками, представленными в виде списков числовых значений. Расстояние Минковского является обобщением других метрик расстояния, таких как евклидово и манхэттенское расстояния.
Параметры:
- point_a (List[float]): Координаты первой точки.
- point_b (List[float]): Координаты второй точки.
- p (Union[int, str]): Параметр показателя степени для вычисления расстояния Минковского.
- Если p - целое число, большее или равное 1, вычисляется расстояние p-нормы.
- Если p равно 'INF', вычисляется расстояние бесконечной нормы (Чебышева).
Возвращает:
- float: Расстояние Минковского между двумя точками. Если передано недопустимое значение p, возвращается -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)
Объяснение
Во - первых, мы импортируем необходимые модули.
Затем определяем функцию minkowski_distance, которая принимает три параметра: point_a, point_b и p.
Функция вычисляет расстояние Минковского:
- Если
p- целое число, большее или равное 1, оно вычисляет расстояние p-нормы по формуле:
[ \text{distance} = \left( \sum \left| \text{point_a} - \text{point_b} \right|^p \right)^{1/p} ] - Если
pравно "INF", оно вычисляет расстояние бесконечной нормы (Чебышева) по формуле: [ \text{distance} = \max \left| \text{point_a} - \text{point_b} \right| ] - Если
pнедействительно, возвращается-1.0.
Тестировать функцию расстояния Минковского
В этом шаге вы будете тестировать функцию minkowski_distance с разными входными параметрами. Следуйте шагам ниже, чтобы завершить этот шаг:
Откройте файл minkowski_distance.py в вашем редакторе кода.
Добавьте следующие тестовые случаи в конец файла:
if __name__ == "__main__":
a = [1, 0]
b = [2, 0]
p = 2
distance = minkowski_distance(a, b, p)
print(f"{a=}, {b=}, {p=}, {distance=}") ## Ожидаемый вывод: 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=}") ## Ожидаемый вывод: 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=}") ## Ожидаемый вывод: a=[1, 4, 10, 0], b=[20, -3, -5, 0], p=-10, distance=-1.0
Запустите файл minkowski_distance.py с помощью следующей команды:
python minkowski_distance.py
Проверьте, что вывод соответствует ожидаемым результатам:
- Для точек
a = [1, 0]иb = [2, 0]сp = 2расстояние должно быть1.0. - Для точек
a = [4, 9, 10]иb = [2, 0, -3]сp = "INF"расстояние должно быть13.0. - Для точек
a = [1, 4, 10, 0]иb = [20, -3, -5, 0]сp = -10расстояние должно быть-1.0.
Резюме
Поздравляем! Вы завершили этот проект. Вы можете практиковаться в более многих лабораторных работах в LabEx, чтобы улучшить свои навыки.



