使用 numpy 矩阵最小化 3 组点之间的距离

Minimize distance between 3 sets of points using numpy matrices

给定 3 组二维点 ABC

A = np.asarray([a1, a2, a3, ..., ak])
B = np.asarray([b1, b2, b3, ..., bm])
C = np.asarray([c1, c2, c3, ..., cn])

我想计算一个 AC 维度 k x n 的矩阵,它包含从 A 中的每个点到 C 中的每个点的最小(欧氏)距离,经过 最佳 B 中的点(最好是最小化路径距离 a -> b -> c

到目前为止,我有距离矩阵 ABBC 以及 A 到 B 和 B 到 C 中的点之间的每对距离

AB = scipy.spatial.distance_matrix(A, B)
BC = scipy.spatial.distance_matrix(B, C)

我现在当然可以 运行 一个嵌套的 for 循环 来得到矩阵 AC

我的问题是这是否可以仅使用 ABBC 之间的矩阵运算来完成(允许形状转换) 甚至可以直接在ABC之间进行运算

此外,是否有可能得到一个类似的矩阵 BestB,维度 k x n,其中每个元素 i,j 包含 index B 中最小化 A[i]B[j]?

之间距离的点

如果有任何有效的算法可以解决这个问题,我也很感激

您可以在这里使用广播:

dist_mat = (AB[...,None] + BC)
min_dist = dist_mat.min()