Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

ระยะทาง Minkowski ใน Python

ระยะทาง Minkowski (Minkowski distance) เป็นเมตริกในอวกเวกเตอร์ที่มีนอร์ม (normed vector space) ผลลัพธ์คืออสมการ Minkowski ใช้สำหรับวัดความคล้ายคลึงของเวกเตอร์

การใช้งานกับ SciPy

>> from scipy.spatial import distance
>>> distance.minkowski([1, 0, 0], [0, 1, 0], 1)
2.0
>>> distance.minkowski([1, 0, 0], [0, 1, 0], 2)
1.4142135623730951
>>> distance.minkowski([1, 0, 0], [0, 1, 0], 3)
1.2599210498948732
>>> distance.minkowski([1, 1, 0], [0, 1, 0], 1)
1.0
>>> distance.minkowski([1, 1, 0], [0, 1, 0], 2)
1.0
>>> distance.minkowski([1, 1, 0], [0, 1, 0], 3)
1.0

พารามิเตอร์ที่ 3 (p) คือพารามิเตอร์ออเดอร์:

  • p = 1: ระยะทาง Manhattan (Manhattan distance)
  • p = 2: ระยะทาง Euclidean (Euclidean distance)
  • p → ∞: ระยะทาง Chebyshev

การสร้างฟังก์ชันคำนวณเอง (Manual Implementation)

from math import *
from decimal import Decimal

def my_p_root(value, root):
    my_root_value = 1 / float(root)
    return round(Decimal(value) ** Decimal(my_root_value), 3)

def my_minkowski_distance(x, y, p_value):
    return my_p_root(sum(pow(abs(a-b), p_value) for a, b in zip(x, y)), p_value)

# Driver Code
vector1 = [0, 2, 3, 4]
vector2 = [2, 4, 3, 7]
my_position = 5
print("The Distance is::", my_minkowski_distance(vector1, vector2, my_position))

ผลลัพธ์

The Distance is:: 3.144

สูตรคณิตศาสตร์

ระยะทาง Minkowski ระหว่างเวกเตอร์ x และ y ระดับ p:

D(x, y) = (Σ|xᵢ - yᵢ|ᵖ)^(1/p)

เมื่อ p=1 เป็น Manhattan distance, p=2 เป็น Euclidean distance