如何找到两个坐标矩阵之间最接近的对应向量?
How to find the closest corresponding vectors between two coordinate matrices?
我在Python中有以下问题需要解决:
给定两个坐标矩阵 (NumPy ndarrays) A
和 B
,找到 A
中所有坐标向量 a
对应的坐标向量 b
在 B
中,使得欧氏距离 ||a-b||
最小化。坐标矩阵A
和B
可以有不同数量的坐标向量(即不同的行数)。
此方法应该 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]])
我在Python中有以下问题需要解决:
给定两个坐标矩阵 (NumPy ndarrays) A
和 B
,找到 A
中所有坐标向量 a
对应的坐标向量 b
在 B
中,使得欧氏距离 ||a-b||
最小化。坐标矩阵A
和B
可以有不同数量的坐标向量(即不同的行数)。
此方法应该 return 一个坐标向量矩阵 C
,其中 C
中的第 i 个向量 c
是来自 B
的向量,它最小化了A
.
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]])