用于计算两组2d点之间的成对距离的Python替代方案

时间:2017-04-27 07:10:50

标签: python algorithm numpy matrix euclidean-distance

在Matlab中存在pdist2命令。给定矩阵mx2和矩阵nx2,每行矩阵代表2d点。现在我想创建一个mxn矩阵,(i,j)元素表示从i矩阵的mx2点到j nx2点的距离矩阵。我只需调用命令pdist2(M,N)

我在python中寻找替代方案。我当然可以写2 for循环,但由于我使用2个numpy数组,使用for循环并不总是最好的选择。在python宇宙中是否有针对此的优化命令?基本上我要求python替代MATLAB' pdist2

3 个答案:

答案 0 :(得分:8)

您正在寻找cdist scipy功能。它将计算两组n维矩阵之间的成对距离(默认为欧几里德)。

from scipy.spatial.distance import cdist
import numpy as np

X = np.arange(10).reshape(-1,2)
Y = np.arange(10).reshape(-1,2)

cdist(X, Y)
[[  0.           2.82842712   5.65685425   8.48528137  11.3137085 ]
 [  2.82842712   0.           2.82842712   5.65685425   8.48528137]
 [  5.65685425   2.82842712   0.           2.82842712   5.65685425]
 [  8.48528137   5.65685425   2.82842712   0.           2.82842712]
 [ 11.3137085    8.48528137   5.65685425   2.82842712   0.        ]]

答案 1 :(得分:0)

您应该检查pairwise_distances包的scikit-learn方法。

sklearn.metrics.pairwise.pairwise_distances(X, Y=None, metric='euclidean', n_jobs=1, **kwds)

http://scikit-learn.org/stable/modules/generated/sklearn.metrics.pairwise.pairwise_distances.html

中的更多信息

答案 2 :(得分:0)

如果您的矩阵不是太大,这应该不使用其他库。如果矩阵很大,这种方法会有点慢和内存密集。

FM_FICTR_READ_SINGLE