最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python七種距離度量方法全解析

 更新時(shí)間:2026年01月24日 13:56:04   作者:AI手記叨叨  
這篇文章主要介紹了Python七種距離度量方法的相關(guān)資料,包括曼哈頓距離、歐氏距離、切比雪夫距離和明科夫斯基距離,并提供每種距離的具體計(jì)算示例及其應(yīng)用場(chǎng)景,幫助大家更好地理解距離度量,需要的朋友可以參考下

前言

本文介紹了歐氏距離、曼哈頓距離、切比雪夫距離、余弦距離、閔可夫斯基距離、漢明距離、編輯距離等七種常用距離度量方法的原理、意義與應(yīng)用場(chǎng)景,并提供了 Python 代碼實(shí)現(xiàn),幫助在數(shù)據(jù)科學(xué)、機(jī)器學(xué)習(xí)與工程實(shí)踐中選擇和使用合適的距離度量方法。

一、 歐式距離

歐氏距離是“直線距離”。在二維或三維空間中,它就是兩個(gè)點(diǎn)之間直接用尺子量出來(lái)的最短距離。

1. 核心思想

它源于歐幾里得的幾何學(xué),衡量的是空間中兩個(gè)點(diǎn)之間的“真實(shí)”直線長(zhǎng)度。

2. 計(jì)算方法

  • 二維空間(平面):計(jì)算兩個(gè)點(diǎn)橫坐標(biāo)差的平方加上縱坐標(biāo)差的平方,然后取平方根。
  • 三維空間:計(jì)算兩個(gè)點(diǎn)橫坐標(biāo)差的平方加上縱坐標(biāo)差的平方再加上豎坐標(biāo)差的平方,然后取平方根。
  • N維空間(通用):計(jì)算兩個(gè)點(diǎn)在各維度上數(shù)值差的平方之和,然后取平方根。

3. 示例代碼

from math import sqrt

def euclidean_distance(p, q):
    """
    計(jì)算歐式距離
    p, q: 相同維度的數(shù)組或列表
    """
    return sqrt(sum((px - qx) ** 2 for px, qx in zip(p, q)))


p = [1, 2, 3]
q = [4, 5, 6]
print(f"歐式距離: {euclidean_distance(p, q)}")

4. 主要特點(diǎn)

  • 幾何直觀強(qiáng):是最自然的距離度量方式,符合日??臻g感知。
  • 各向同性:在各個(gè)方向上具有相同的權(quán)重,適用于度量“真實(shí)”空間距離。
  • 對(duì)異常值敏感:由于平方項(xiàng)的存在,個(gè)別維度的大差異會(huì)被放大。
  • 計(jì)算復(fù)雜度中等:涉及平方、求和與開(kāi)方運(yùn)算。

5. 常見(jiàn)應(yīng)用場(chǎng)景

  • 空間幾何:如計(jì)算兩點(diǎn)之間的實(shí)際距離。
  • 機(jī)器學(xué)習(xí):KNN、K-means等算法中常用的距離度量。
  • 圖像處理:如像素之間的顏色距離計(jì)算。
  • 數(shù)據(jù)聚類與分類:在特征空間中度量樣本相似性。

二、 曼哈頓距離

曼哈頓距離,也稱為“城市街區(qū)距離”或“L1距離”,是指兩點(diǎn)在標(biāo)準(zhǔn)坐標(biāo)系上的絕對(duì)軸距總和。

1. 核心思想

來(lái)源于在網(wǎng)格狀道路(如曼哈頓街區(qū))中行走的最短路徑,只能沿著水平和垂直方向移動(dòng),不能走斜線。

2. 計(jì)算方法

計(jì)算兩個(gè)點(diǎn)在各維度上數(shù)值差的絕對(duì)值之和。

3. 示例代碼

def manhattan_distance(p, q):
    """
    計(jì)算曼哈頓距離
    """
    return sum(abs(px - qx) for px, qx in zip(p, q))

# 示例
p = [1, 2, 3]
q = [4, 5, 6]
print(f"曼哈頓距離: {manhattan_distance(p, q)}")

4. 主要特點(diǎn)

  • 非直線路徑:適用于只能沿坐標(biāo)軸方向移動(dòng)的場(chǎng)景。
  • 對(duì)異常值不敏感:相比歐氏距離,對(duì)個(gè)別維度的極端值不那么敏感。
  • 計(jì)算簡(jiǎn)單高效:僅涉及絕對(duì)值和加法運(yùn)算。

5. 常見(jiàn)應(yīng)用場(chǎng)景

  • 路徑規(guī)劃:如城市網(wǎng)格導(dǎo)航、機(jī)器人移動(dòng)規(guī)劃。
  • 數(shù)據(jù)挖掘:在某些聚類或分類任務(wù)中,尤其是當(dāng)特征空間具有明顯網(wǎng)格結(jié)構(gòu)時(shí)。
  • 圖像處理:如像素距離計(jì)算、圖像壓縮等。

三、 切比雪夫距離

切比雪夫距離,也稱為“棋盤(pán)距離”,是指兩點(diǎn)之間各坐標(biāo)數(shù)值差的最大值。

1. 核心思想

來(lái)源于國(guó)際象棋中“王”的移動(dòng)方式,可以朝任意方向移動(dòng)一格,因此在多維空間中體現(xiàn)為各維度差值中的最大值。

2. 計(jì)算方法

取兩個(gè)點(diǎn)在各維度上數(shù)值差的絕對(duì)值中的最大值。

3. 示例代碼

def chebyshev_distance(p, q):
    """
    計(jì)算切比雪夫距離
    """
    return max(abs(px - qx) for px, qx in zip(p, q))

# 示例
p = [1, 2, 3]
q = [4, 5, 6]
print(f"切比雪夫距離: {chebyshev_distance(p, q)}")

4. 主要特點(diǎn)

  • 關(guān)注最大差異:僅由最大差異的維度決定距離。
  • 適用于方形鄰域:在多維空間中定義“超立方體”鄰域。
  • 計(jì)算簡(jiǎn)單:僅需比較和取最大值。

5. 常見(jiàn)應(yīng)用場(chǎng)景

  • 棋盤(pán)類游戲AI:如國(guó)際象棋、圍棋的移動(dòng)判斷。
  • 工業(yè)制造:在質(zhì)量控制中檢測(cè)最大偏差。
  • 圖像處理:用于邊緣檢測(cè)、形態(tài)學(xué)操作中的鄰域定義。

四、余弦距離

1. 核心思想

余弦距離用于衡量?jī)蓚€(gè)向量在方向上的差異,而不是位置或絕對(duì)長(zhǎng)度。它基于向量夾角的余弦值,適用于高維稀疏向量比較,如文本相似性分析。

2. 計(jì)算方法

  1. 計(jì)算兩個(gè)向量的點(diǎn)積(對(duì)應(yīng)元素相乘后求和)
  2. 分別計(jì)算兩個(gè)向量的模長(zhǎng)(各元素平方和的平方根)
  3. 用點(diǎn)積除以兩個(gè)模長(zhǎng)的乘積,得到余弦相似度
  4. 余弦距離 = 1 - 余弦相似度

3. 示例代碼

import numpy as np
from numpy.linalg import norm


def cosine_distance(a, b):
    """
    計(jì)算余弦距離 = 1 - 余弦相似度
    注:對(duì)于零向量,余弦相似度通常定義為0,因此余弦距離為1
    """
    dot_product = np.dot(a, b)
    norm_a = norm(a)
    norm_b = norm(b)

    if norm_a == 0 or norm_b == 0:
        return 1.0  # 零向量的情況

    cosine_sim = dot_product / (norm_a * norm_b)
    return 1.0 - cosine_sim


# 示例
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
print(f"余弦距離: {cosine_distance(a, b)}")

4. 主要特點(diǎn)

  • 方向敏感性:只關(guān)注向量方向,忽略長(zhǎng)度差異
  • 適合高維稀疏數(shù)據(jù):對(duì)文本TF-IDF向量等效果顯著
  • 歸一化特性:結(jié)果在[0,2]或[0,1]之間
  • 計(jì)算復(fù)雜度:中等,涉及點(diǎn)積和范數(shù)計(jì)算

5. 常見(jiàn)應(yīng)用場(chǎng)景

  • 文本相似度計(jì)算(信息檢索、推薦系統(tǒng))
  • 文檔聚類與分類
  • 協(xié)同過(guò)濾推薦
  • 高維數(shù)據(jù)相似性搜索

五、閔可夫斯基距離

1. 核心思想

閔可夫斯基距離是歐式距離和曼哈頓距離的一般化形式,通過(guò)參數(shù) ( p ) 控制距離的計(jì)算方式。

2. 計(jì)算方法

  1. 計(jì)算兩個(gè)點(diǎn)在各維度上數(shù)值差的絕對(duì)值的 p 次方
  2. 將這些 p 次方的值求和
  3. 對(duì)求和結(jié)果取 p 次方根

3. 特殊情況

  • p = 1:曼哈頓距離
  • p = 2:歐氏距離
  • p → ∞:切比雪夫距離

4. 示例代碼

from math import pow


def minkowski_distance(point1, point2, order=2):
    """
    計(jì)算閔可夫斯基距離

    參數(shù):
    point1, point2: 要比較的點(diǎn)(列表或數(shù)組)
    order: 閔可夫斯基參數(shù)(order=1:曼哈頓,order=2:歐式,order=∞:切比雪夫)
    """
    if order == float('inf'):
        # 切比雪夫距離
        return max(abs(p1 - p2) for p1, p2 in zip(point1, point2))

    sum_power = sum(pow(abs(p1 - p2), order) for p1, p2 in zip(point1, point2))
    return pow(sum_power, 1.0 / order)


# 示例
p = [1, 2, 3]
q = [4, 5, 6]

print(f"閔可夫斯基距離(order=1, 曼哈頓): {minkowski_distance(p, q, order=1)}")
print(f"閔可夫斯基距離(order=2, 歐式): {minkowski_distance(p, q, order=2)}")
print(f"閔可夫斯基距離(order=3): {minkowski_distance(p, q, order=3)}")
print(f"閔可夫斯基距離(order=∞, 切比雪夫): {minkowski_distance(p, q, order=float('inf'))}")

5. 主要特點(diǎn)

  • 通用性強(qiáng):通過(guò)參數(shù)調(diào)節(jié)適應(yīng)不同場(chǎng)景
  • 連續(xù)變化:距離特性隨 p 值連續(xù)變化
  • 對(duì)異常值的敏感性:當(dāng) p 值較大時(shí),對(duì)異常值更敏感;p 值較小時(shí),對(duì)異常值較不敏感。
  • 計(jì)算復(fù)雜度:隨 p 變化,一般高于曼哈頓距離

6. 常見(jiàn)應(yīng)用場(chǎng)景

  • 機(jī)器學(xué)習(xí)中的距離度量選擇
  • 模式識(shí)別與分類
  • 參數(shù)化距離分析
  • 多準(zhǔn)則決策分析

六、漢明距離

1. 核心思想

漢明距離用于比較兩個(gè)等長(zhǎng)字符串或序列的不同位置數(shù)量,主要用于編碼理論和信息論。

2. 計(jì)算方法

比較兩個(gè)字符串或序列對(duì)應(yīng)位置上的字符或數(shù)值,統(tǒng)計(jì)不相等的位數(shù)的總數(shù)。

3. 示例代碼

def hamming_distance(s1, s2):
    """
    計(jì)算漢明距離(適用于等長(zhǎng)序列)
    """
    if len(s1) != len(s2):
        raise ValueError("序列長(zhǎng)度必須相等")

    return sum(c1 != c2 for c1, c2 in zip(s1, s2))


# 示例(字符串)
s1 = "karolin"
s2 = "kathrin"
print(f"字符串漢明距離: {hamming_distance(s1, s2)}") 

# 示例(二進(jìn)制列表)
binary1 = [1, 0, 1, 0, 1]
binary2 = [0, 1, 0, 1, 0]
print(f"二進(jìn)制漢明距離: {hamming_distance(binary1, binary2)}") 

4. 主要特點(diǎn)

  • 離散性:只比較對(duì)應(yīng)位置是否相等
  • 簡(jiǎn)單高效:適用于二進(jìn)制或離散數(shù)據(jù)
  • 無(wú)方向性:僅計(jì)數(shù)差異,不衡量差異大小

5. 常見(jiàn)應(yīng)用場(chǎng)景

  • 錯(cuò)誤檢測(cè)與糾正編碼
  • 基因組序列比對(duì)
  • 網(wǎng)絡(luò)數(shù)據(jù)包校驗(yàn)
  • 二進(jìn)制特征比較

七、編輯距離

1. 核心思想

編輯距離衡量?jī)蓚€(gè)字符串之間的相似度,定義為將一個(gè)字符串轉(zhuǎn)換為另一個(gè)字符串所需的最少編輯操作次數(shù)(插入、刪除、替換)。

2. 計(jì)算方法

使用動(dòng)態(tài)規(guī)劃算法:

  1. 創(chuàng)建一個(gè)二維表格,行數(shù)=源字符串長(zhǎng)度+1,列數(shù)=目標(biāo)字符串長(zhǎng)度+1
  2. 初始化第一行和第一列(從空字符串轉(zhuǎn)換的代價(jià))
  3. 逐行逐列填充表格:
    • 如果字符相同,直接取左上角值(表示無(wú)需編輯)。
    • 如果字符不同,取左方(刪除)、上方(插入)、左上方(替換)三個(gè)值的最小值加1。
  4. 表格右下角的值即為編輯距離

3. 示例代碼

def edit_distance(s1, s2):
    """
    計(jì)算編輯距離(Levenshtein距離)
    """
    m, n = len(s1), len(s2)
    dp = [[0] * (n + 1) for _ in range(m + 1)]
    
    # 初始化邊界條件
    for i in range(m + 1):
        dp[i][0] = i
    for j in range(n + 1):
        dp[0][j] = j
    
    # 動(dòng)態(tài)規(guī)劃填表
    for i in range(1, m + 1):
        for j in range(1, n + 1):
            if s1[i-1] == s2[j-1]:
                dp[i][j] = dp[i-1][j-1]  # 字符相同,無(wú)需編輯
            else:
                dp[i][j] = min(
                    dp[i-1][j] + 1,    # 刪除
                    dp[i][j-1] + 1,    # 插入
                    dp[i-1][j-1] + 1   # 替換
                )
    return dp[m][n]


def normalized_edit_distance(s1, s2):
    """
    計(jì)算歸一化編輯距離(范圍[0, 1])
    """
    max_len = max(len(s1), len(s2))
    if max_len == 0:
        return 0.0
    return edit_distance(s1, s2) / max_len


# 示例
s1 = "kitten"
s2 = "sitting"
print(f"編輯距離: {edit_distance(s1, s2)}")  # 輸出: 3
print(f"歸一化編輯距離: {normalized_edit_distance(s1, s2):.4f}")  # 輸出: 0.4286

4. 主要特點(diǎn)

  • 靈活性強(qiáng):支持不等長(zhǎng)字符串
  • 操作敏感:區(qū)分插入、刪除、替換
  • 計(jì)算復(fù)雜度:O(m×n),可優(yōu)化
  • 歸一化版本:編輯距離歸一化到 [0,1] 區(qū)間

5. 常見(jiàn)應(yīng)用場(chǎng)景

  • 拼寫(xiě)檢查與糾錯(cuò)
  • 生物序列比對(duì)(DNA/蛋白質(zhì))
  • 自然語(yǔ)言處理(文本相似度)
  • 模糊字符串匹配(數(shù)據(jù)清洗)
  • 語(yǔ)音識(shí)別與語(yǔ)音轉(zhuǎn)換

八、 比較

核心思想計(jì)算復(fù)雜度異常值敏感性適用數(shù)據(jù)類型應(yīng)用場(chǎng)景別名/類別
歐式距離兩點(diǎn)之間的“直線距離”中等(平方、求和、開(kāi)方)敏感(平方放大異常值)各向同性空間幾何距離、KNN、聚類、圖像處理L2距離、直線距離
曼哈頓距離兩點(diǎn)在網(wǎng)格路徑上的“城市街區(qū)距離”低(絕對(duì)值、求和)較不敏感網(wǎng)格/正交空間路徑規(guī)劃、網(wǎng)格導(dǎo)航、圖像處理、數(shù)據(jù)挖掘L1距離、城市街區(qū)距離
切比雪夫距離兩點(diǎn)在各維度上差異的最大值低(比較、取最大值)依賴最大差異維度最大差異主導(dǎo)空間棋盤(pán)AI、質(zhì)量控制、圖像形態(tài)學(xué)棋盤(pán)距離、L∞距離
余弦距離向量方向相似性中等不敏感高維稀疏向量文本挖掘、推薦系統(tǒng)、文檔聚類余弦相似度的補(bǔ)
閔可夫斯基距離參數(shù)化的通用距離族中等(取決于p)敏感(p≠∞時(shí))連續(xù)數(shù)值數(shù)據(jù)參數(shù)化距離分析、機(jī)器學(xué)習(xí)Minkowski距離族
漢明距離離散序列差異計(jì)數(shù)對(duì)位置差異敏感等長(zhǎng)序列編碼理論、基因組比對(duì)、錯(cuò)誤檢測(cè)漢明差異
編輯距離字符串轉(zhuǎn)換的最少編輯操作數(shù)中等(O(m×n),動(dòng)態(tài)規(guī)劃)對(duì)編輯位置敏感,對(duì)數(shù)值不敏感字符串/序列(可不等長(zhǎng))拼寫(xiě)糾錯(cuò)、生物序列比對(duì)、文本相似度、模糊匹配Levenshtein距離、字符串編輯距離

九、選擇

  1. 歐式距離:最自然的空間距離,適用于物理空間或各向同性特征空間
  2. 曼哈頓距離:適用于網(wǎng)格路徑、特征獨(dú)立的場(chǎng)景
  3. 切比雪夫距離:關(guān)注最大差異的場(chǎng)景,如質(zhì)量控制
  4. 余弦距離:適合文本、高維稀疏數(shù)據(jù)的方向比較
  5. 閔可夫斯基距離:需要靈活調(diào)整距離特性的參數(shù)化方法
  6. 漢明距離:離散序列、編碼、二進(jìn)制數(shù)據(jù)的比較
  7. 編輯距離:字符串處理、文本相似度、生物信息學(xué)

不同的距離度量適用于不同的數(shù)據(jù)特性和任務(wù)需求。在實(shí)際應(yīng)用中,通常需要根據(jù)數(shù)據(jù)分布、特征關(guān)系和具體任務(wù)來(lái)選擇合適的距離函數(shù)。

到此這篇關(guān)于Python七種距離度量方法的文章就介紹到這了,更多相關(guān)Python距離度量方法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python對(duì)列表中的各項(xiàng)進(jìn)行關(guān)聯(lián)詳解

    Python對(duì)列表中的各項(xiàng)進(jìn)行關(guān)聯(lián)詳解

    這篇文章主要給大家介紹了關(guān)于Python對(duì)列表中各項(xiàng)進(jìn)行關(guān)聯(lián)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面跟著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-08-08
  • python Tkinter的簡(jiǎn)單入門(mén)教程

    python Tkinter的簡(jiǎn)單入門(mén)教程

    這篇文章主要介紹了python Tkinter的簡(jiǎn)單入門(mén)教程,幫助大家更好的理解和學(xué)習(xí)使用python制作gui程序,感興趣的朋友可以了解下
    2021-04-04
  • 編程語(yǔ)言Python的發(fā)展史

    編程語(yǔ)言Python的發(fā)展史

    這篇文章主要介紹了編程語(yǔ)言Python的發(fā)展史,本文詳細(xì)介紹了Python語(yǔ)言的發(fā)展歷史,需要的朋友可以參考下
    2014-09-09
  • Python 變量命名規(guī)則和定義變量詳解

    Python 變量命名規(guī)則和定義變量詳解

    這篇文章主要為大家介紹了Python 變量命名規(guī)則和定義變量,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2021-12-12
  • python中字符串?dāng)?shù)組逆序排列方法總結(jié)

    python中字符串?dāng)?shù)組逆序排列方法總結(jié)

    在本篇文章里小編給大家整理了關(guān)于python中字符串?dāng)?shù)組如何逆序排列的相關(guān)知識(shí)點(diǎn),需要的朋友們學(xué)習(xí)下。
    2019-06-06
  • python字典中items()函數(shù)用法實(shí)例

    python字典中items()函數(shù)用法實(shí)例

    Python字典items()函數(shù)作用以列表返回可遍歷的(鍵, 值)元組數(shù)組,下面這篇文章主要給大家介紹了關(guān)于python字典中items()函數(shù)用法的相關(guān)資料,需要的朋友可以參考下
    2022-11-11
  • Python變量和字符串詳解

    Python變量和字符串詳解

    本篇文章主要介紹了Python變量和字符串的相關(guān)資料。具有很好的參考價(jià)值。下面跟著小編一起來(lái)看下吧
    2017-04-04
  • 在windows系統(tǒng)中實(shí)現(xiàn)python3安裝lxml

    在windows系統(tǒng)中實(shí)現(xiàn)python3安裝lxml

    本文主要給大家簡(jiǎn)單介紹了下在windows以及l(fā)inux系統(tǒng)中使用Python安裝LXML模塊的教程,非常簡(jiǎn)單實(shí)用,有需要的小伙伴可以參考下
    2016-03-03
  • 深入淺析python 中的self和cls的區(qū)別

    深入淺析python 中的self和cls的區(qū)別

    這篇文章主要介紹了python 中的self和cls的實(shí)例代碼及區(qū)別講解,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-06-06
  • Python求平面內(nèi)點(diǎn)到直線距離的實(shí)現(xiàn)

    Python求平面內(nèi)點(diǎn)到直線距離的實(shí)現(xiàn)

    今天小編就為大家分享一篇Python求平面內(nèi)點(diǎn)到直線距離的實(shí)現(xiàn),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-01-01

最新評(píng)論

阿克苏市| 嘉善县| 甘南县| 绥滨县| 正镶白旗| 兰坪| 正安县| 巴林左旗| 北京市| 波密县| 搜索| 晋中市| 兴国县| 石泉县| 方城县| 琼结县| 岳阳县| 汽车| 南汇区| 莲花县| 桃江县| 古丈县| 满城县| 枣强县| 西昌市| 日喀则市| 霞浦县| 闻喜县| 迭部县| 佛学| 新乡县| 东台市| 竹溪县| 扬州市| 望都县| 容城县| 宁乡县| 法库县| 青铜峡市| 崇明县| 上栗县|