使用 numpy 矩阵最小化 3 组点之间的距离
Minimize distance between 3 sets of points using numpy matrices
给定 3 组二维点 A
、B
和 C
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
)
到目前为止,我有距离矩阵 AB
和 BC
以及 A 到 B 和 B 到 C 中的点之间的每对距离
AB = scipy.spatial.distance_matrix(A, B)
BC = scipy.spatial.distance_matrix(B, C)
我现在当然可以 运行 一个嵌套的 for 循环 来得到矩阵 AC
我的问题是这是否可以仅使用 AB
和 BC
之间的矩阵运算来完成(允许形状转换)
甚至可以直接在A
、B
和C
之间进行运算
此外,是否有可能得到一个类似的矩阵 BestB
,维度 k x n
,其中每个元素 i,j
包含 index B 中最小化 A[i]
到 B[j]
?
之间距离的点
如果有任何有效的算法可以解决这个问题,我也很感激
您可以在这里使用广播:
dist_mat = (AB[...,None] + BC)
min_dist = dist_mat.min()
给定 3 组二维点 A
、B
和 C
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
)
到目前为止,我有距离矩阵 AB
和 BC
以及 A 到 B 和 B 到 C 中的点之间的每对距离
AB = scipy.spatial.distance_matrix(A, B)
BC = scipy.spatial.distance_matrix(B, C)
我现在当然可以 运行 一个嵌套的 for 循环 来得到矩阵 AC
我的问题是这是否可以仅使用 AB
和 BC
之间的矩阵运算来完成(允许形状转换)
甚至可以直接在A
、B
和C
之间进行运算
此外,是否有可能得到一个类似的矩阵 BestB
,维度 k x n
,其中每个元素 i,j
包含 index B 中最小化 A[i]
到 B[j]
?
如果有任何有效的算法可以解决这个问题,我也很感激
您可以在这里使用广播:
dist_mat = (AB[...,None] + BC)
min_dist = dist_mat.min()