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

Python 如何在两个坐标矩阵之间找到最接近的对应向量?,python,numpy,vector,euclidean-distance,Python,Numpy,Vector,Euclidean Distance,我需要解决Python中的以下问题: 给定两个坐标矩阵(NumPy ndarrays)A和B,在A中找到所有坐标向量A,在B中找到相应的坐标向量B,从而使欧几里德距离|A-B |最小化。坐标矩阵A和B可以具有不同数量的坐标向量(即,不同数量的行) 此方法应返回坐标向量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]与

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

给定两个坐标矩阵(NumPy ndarrays)
A
B
,在
A
中找到所有坐标向量
A
,在
B
中找到相应的坐标向量
B
,从而使欧几里德距离
|A-B |
最小化。坐标矩阵
A
B
可以具有不同数量的坐标向量(即,不同数量的行)

此方法应返回坐标向量
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中高效地对其进行编码?

您可以使用
cdist
from来高效地获得欧几里德距离,然后使用来获得对应于最小值的索引,并使用这些索引将其索引到
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]])
太好了,谢谢!=)我在做大量的计算,所以效率在我的问题中很重要:)