如何在两个坐标矩阵之间找到最接近的对应矢量?

时间:2015-06-12 10:05:37

标签: python numpy vector euclidean-distance

我在Python中遇到以下问题需要解决:

给定两个坐标矩阵(NumPy ndarrays)AB,在a中找到A中所有坐标向量b的{​​{1}} { {1}},使欧几里德距离B最小化。坐标矩阵||a-b||A可以有不同数量的坐标向量(即不同的行数)。

此方法应返回坐标向量B矩阵,其中C中的第i个向量c是来自C的向量,它使用欧洲坐标最小化欧几里德距离B中的向量a

例如,假设

AA = np.array([[1,1], [3,4]])

B = np.array([[1,2], [3,6], [8,1]])中的向量[1,1]A中的向量之间的欧几里德距离为:

B

因此1, 5.385165, 7 中的第一个向量为C

类似地,[1,2]中的向量[3,4]A中的向量的距离为:

B

因此2.828427, 2, 5.830952 中的第二个和最后一个向量为C

所以[3,6]

如何在Python中高效编码?

1 个答案:

答案 0 :(得分:4)

您可以使用scipy.spatial.distance中的cdist来有效获取欧几里德距离,然后使用np.argmin获取与最小值对应的索引,并使用这些索引编入B为了最终的输出。这是实施 -

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

C = B[np.argmin(cdist(A,B),1)] 

示例运行 -

In [99]: A
Out[99]: 
array([[1, 1],
       [3, 4]])

In [100]: B
Out[100]: 
array([[1, 2],
       [3, 6],
       [8, 1]])

In [101]: B[np.argmin(cdist(A,B),1)]
Out[101]: 
array([[1, 2],
       [3, 6]])