Khoảng cách Minkowski là metric trong không gian vector chuẩn, tổng quát hóa khoảng cách Euclidean (p=2) và Manhattan (p=1).
Sử dụng scipy.spatial.distance.minkowski
>> from scipy.spatial import distance
>>> distance.minkowski([1, 0, 0], [0, 1, 0], 1) # p=1: Manhattan
2.0
>>> distance.minkowski([1, 0, 0], [0, 1, 0], 2) # p=2: Euclidean
1.4142135623730951
>>> distance.minkowski([1, 0, 0], [0, 1, 0], 3) # p=3
1.2599210498948732
Triển khai thủ công
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)
# Test
vector1 = [0, 2, 3, 4]
vector2 = [2, 4, 3, 7]
p = 5
print("Khoảng cách:", my_minkowski_distance(vector1, vector2, p))
# Output: 3.144
Công thức
(Σ|xᵢ - yᵢ|ᵖ)^(1/p)
- p=1: Khoảng cách Manhattan
- p=2: Khoảng cách Euclidean
- p→∞: Khoảng cách Chebyshev
Ứng dụng
- Machine learning: KNN, clustering.
- Xử lý hình ảnh, nhận dạng mẫu.
- Đo độ tương đồng vector.