Python 如何在两个坐标矩阵之间找到最接近的对应向量?
我需要解决Python中的以下问题: 给定两个坐标矩阵(NumPy ndarrays)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]与
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]])
太好了,谢谢!=)我在做大量的计算,所以效率在我的问题中很重要:)