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

How to find the closest corresponding vectors between two coordinate matrices?

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

给定两个坐标矩阵 (NumPy ndarrays) AB,找到 A 中所有坐标向量 a 对应的坐标向量 bB 中,使得欧氏距离 ||a-b|| 最小化。坐标矩阵AB可以有不同数量的坐标向量(即不同的行数)。

此方法应该 return 一个坐标向量矩阵 C,其中 C 中的第 i 个向量 c 是来自 B 的向量,它最小化了A.

中第i个坐标向量a的欧氏距离

例如,假设

A = np.array([[1,1], [3,4]])B = np.array([[1,2], [3,6], [8,1]])

A 中的向量 [1,1]B 中的向量之间的欧氏距离为:

1, 5.385165, 7

所以 C 中的第一个向量将是 [1,2]

同样,A 中的向量 [3,4]B 中的向量的距离为:

2.828427, 2, 5.830952  

所以 C 中的第二个也是最后一个向量将是 [3,6]

所以C = [[1,2], [3,6]]

如何在 Python 中高效地编码?

您可以使用 scipy.spatial.distance to efficiently get the euclidean distances and then use np.argmin 中的 cdist 获取对应于最小值的索引,并使用这些索引索引到 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]])