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 维数组的成对距离的方法。您可以在您的程序中实现任何您认为最优或最舒适使用的方法来计算成对距离。