Python - n 维空间数组的成对距离

pythonserver side programmingprogramming更新于 2023/8/30 5:34:00

成对距离计算用于各种领域,包括数据分析、机器学习和图像处理。我们可以计算每个数据集中每对元素之间的成对距离。在本文中,我们将了解在 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.        ]]

在上面的例子中,我们创建了三维数组 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"的三维数组,并使用 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 维数组成对距离的一些方法。您可以在程序中实现任何您认为最佳或舒适的方法来计算成对距离。


相关文章