Python - N維空間陣列的成對距離


成對距離計算應用於資料分析、機器學習和影像處理等各個領域。我們可以計算每個資料集中每對元素之間的成對距離。在本文中,我們將瞭解使用 Python 計算多維資料陣列的成對距離的各種方法。我們還將瞭解 SciPy 庫中提供的 pdist 函式。

成對距離

需要記住的一點是:在計算 n 維空間中的成對距離時,我們必須找到每對點之間的距離。您可以根據資料型別和要解決的問題的規範選擇任何距離度量。

一些常用的距離度量包括:

  • 歐幾里得距離 - 用於測量直線距離。

  • 曼哈頓距離 - 用於測量沿每個維度絕對差之和。

  • 閔可夫斯基距離 - 用於概括歐幾里得距離和曼哈頓距離。

這些度量幫助我們根據手頭的問題以不同的方式識別資料點之間的差異或相似性。

讓我們看看一些計算成對距離的方法。

方法 1:手動計算

我們可以透過實現距離計算公式來手動計算成對距離。例如,使用兩點 (x1, y1) 和 (x2, y2)。我們可以使用以下公式計算這兩點之間的歐幾里得距離:

distance = sqrt((x2 - x1)^2 + (y2 - y1)^2)

我們可以將此公式應用於每對點以計算成對距離。對於大型資料集和更高維度的陣列,使用這種方法在計算上可能很昂貴且耗時。

方法 2:NumPy 和 SciPy 庫

此方法利用 NumPy 和 SciPy 庫的功能。這些庫是 Python 語言中用於科學計算的流行且高效的工具。這些庫提供了經過最佳化的函式,可以有效地計算成對距離,從而節省時間並簡化流程。

為了計算 NumPy 和 SciPy 的成對距離,我們首先將表示多維資料的陣列轉換為矩陣格式。這可以透過使用 NumPy 陣列函式來實現,該函式從我們的資料集中建立矩陣。隨後,我們可以利用SciPy提供的cdist函式來計算成對距離。

示例

import numpy as np
from scipy.spatial.distance import cdist
pts = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
dist = cdist(pts, pts, metric='euclidean')
print(dist)

輸出

[[ 0.          5.19615242 10.39230485]
 [ 5.19615242  0.          5.19615242]
 [10.39230485  5.19615242  0.        ]]

在上面的示例中,我們建立了 3 維陣列 pts 並使用了cdist函式,該函式用於使用歐幾里得距離度量計算成對距離。在結果陣列中,它將包含 pts 陣列中每對點之間的距離。

方法 3:Scikit-learn 庫

Scikit-learn 是一個用於機器學習工作的 Python 庫。它為資料分析和建模提供了各種功能。其有用功能之一是能夠輕鬆計算成對距離。

Scikit-learn 是一個用於機器學習工作的 Python 庫。它為資料分析和建模提供了廣泛的功能。其有用功能之一是能夠輕鬆計算成對距離。

例如,如果我們想使用曼哈頓距離度量計算成對距離,我們可以使用 scikit-learn 的 pairwise_distances 函式。它將完成計算工作以節省時間和精力。

示例

from sklearn.metrics import pairwise_distances
pts = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
dis = pairwise_distances(pts, metric='manhattan')
print(dis)

輸出

[[ 0. 9. 18.] 
[ 9. 0. 9.] 
[18. 9. 0.]]

這裡在示例中,我們取了一個名為“pts”的 3 維陣列,為了計算成對距離,我們將使用 pairwise_distances 函式。結果陣列將包含每對點之間的距離

方法 4:Scipy.spatial.distance 模組

在這種方法中,我們將使用 scipy.spatial.distance,它為成對距離計算提供各種型別的距離矩陣。

示例

from scipy.spatial.distance import cdist
pts = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
dis = cdist(pts, pts)
print(dis)

輸出

[[ 0.          5.19615242 10.39230485]
 [ 5.19615242  0.          5.19615242]
 [10.39230485  5.19615242  0.        ]]

方法 5:使用 NearestNeighbors 類

在這種方法中,我們可以使用 skit learn 庫中的 NearestNeighbors 類。我們可以使用此類查詢最近鄰以及查詢點之間的距離。

示例

from sklearn.neighbors import NearestNeighbors

pts = [[1, 2], [4, 5], [7, 8]]
nbrs = NearestNeighbors(n_neighbors=len(pts)).fit(pts)
dis, _ = nbrs.kneighbors(pts)

print(dis)

輸出

[[0. 4.24264069 8.48528137] 
[0. 4.24264069 4.24264069] 
[0. 4.24264069 8.48528137]]

解釋

在上面的程式中,我們建立了 NearestNeighbors 類的例項,並使用 kneighbors 方法查詢每一點與其最近鄰之間的距離。這裡在輸出中,第一個點 0 表示點 1、2 到自身之間的距離。而第二個元素表示 (1,2) 到 (4,5) 之間的距離。

因此,這些是一些使用 Python 語言計算 n 維陣列的成對距離的方法。您可以在您的程式中實現任何您認為最優或最舒適使用的方法來計算成對距離。

更新於: 2023年10月13日

494 次檢視

開啟您的 職業生涯

完成課程獲得認證

開始
廣告