python-如何找到两个坐标矩阵之间最接近的对应矢量?
作者:互联网
我在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中有效地编写代码?
解决方法:
您可以使用从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]])
标签:euclidean-distance,vector,python,numpy 来源: https://codeday.me/bug/20191028/1950731.html