一、曼哈頓距離
曼哈頓距離又叫L1距離,它是點在坐標繫上的曼哈頓距離。對於平面上的兩個點(x1, y1)和(x2, y2),它們之間的曼哈頓距離是|x1-x2|+|y1-y2|,也就是橫向和縱向距離各自相加的值。
曼哈頓距離可以用於解決很多實際問題,例如計程車在城市裡行駛的費用問題。在一個網格狀道路的城市中,計程車需要按照交通規則行駛,不能直線行駛,所以到達目的地的最短距離並不一定是直線距離。因此我們可以在城市中以紅綠燈、標誌、路口等為網格,以曼哈頓距離作為距離,來求得計程車到達目的地的最短距離。
def manhattan_distance(point1, point2): return abs(point1[0]-point2[0]) + abs(point1[1]-point2[1])
二、歐幾里得距離
歐幾里得距離又叫L2距離,是點在坐標繫上的直線距離。對於平面上的兩個點(x1, y1)和(x2, y2),它們之間的歐式距離是√((x1-x2)²+(y1-y2)²)。
歐幾里得距離可以用於解決很多實際問題,例如機器學習中的KNN(K-Nearest Neighbors)分類演算法。在KNN演算法中,我們需要找到距離輸入數據最近的K個數據點,然後按照這K個數據點所屬的類別,來確定輸入數據的類別。此時我們就可以使用歐幾里得距離來計算數據點之間的距離,以確定哪些數據點是最近的。
import math def euclidean_distance(point1, point2): return math.sqrt((point1[0]-point2[0])**2 + (point1[1]-point2[1])**2)
三、曼哈頓距離與歐幾里得距離的比較
曼哈頓距離和歐幾里得距離都是常用的距離度量。相比之下,曼哈頓距離更適合用於計算網格狀的數據結構,如城市街道,棋盤等;歐幾里得距離更適合用於連續空間的數據結構,如三維坐標、時間序列等。曼哈頓距離更容易計算,但它忽略了直線距離的影響;歐幾里得距離更準確,但計算量相對較大。
def compare_distance(point1, point2): manhattan_dis = manhattan_distance(point1, point2) euclidean_dis = euclidean_distance(point1, point2) if manhattan_dis > euclidean_dis: print("歐幾里得距離更優") elif manhattan_dis == euclidean_dis: print("曼哈頓距離和歐幾里得距離等效") else: print("曼哈頓距離更優")
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/242786.html