Реализация метрики расстояния Минковского

PythonPythonBeginner
Практиковаться сейчас

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В этом проекте вы научитесь реализовывать функцию Минковского расстояния, обобщенную метрику расстояния, которая включает в себя широко используемые меры расстояния, такие как евклидово и манхэттенское расстояния. Также вы научитесь тестировать и усовершенствовать функцию, а также как интегрировать ее в более крупный проект.

🎯 Задачи

В этом проекте вы научитесь:

  • реализовывать функцию Минковского расстояния на Python
  • тестировать функцию Минковского расстояния с разными входными параметрами
  • усовершенствовать функцию Минковского расстояния для обработки граничных случаев
  • интегрировать функцию Минковского расстояния в более крупный проект

🏆 Достижения

После завершения этого проекта вы сможете:

  • вычислять расстояния Минковского между двумя точками
  • обрабатывать разные типы входных параметров для функции Минковского расстояния
  • тестировать и усовершенствовать функцию, чтобы повысить ее надежность
  • интегрировать пользовательскую функцию в более крупный проект

Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL python(("Python")) -.-> python/PythonStandardLibraryGroup(["Python Standard Library"]) python(("Python")) -.-> python/ControlFlowGroup(["Control Flow"]) python(("Python")) -.-> python/DataStructuresGroup(["Data Structures"]) python(("Python")) -.-> python/FunctionsGroup(["Functions"]) 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{{"Реализация метрики расстояния Минковского"}} python/lists -.-> lab-373572{{"Реализация метрики расстояния Минковского"}} python/function_definition -.-> lab-373572{{"Реализация метрики расстояния Минковского"}} python/math_random -.-> lab-373572{{"Реализация метрики расстояния Минковского"}} end

Реализация функции расстояния Минковского

В этом шаге вы научитесь реализовывать функцию расстояния Минковского на 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, чтобы улучшить свои навыки.