编程语言
首页 > 编程语言> > python-如何找到两个坐标矩阵之间最接近的对应矢量?

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