匈牙利算法解决两个坐标列表匹配的问题

遇到一个问题,有一个坐标列表A:[[10,20],[20,30],[42,41]],和一个坐标列表B:[[14,24],[41,42],[20,31],[42,41]],需要看这两个坐标列表之间谁与谁更加匹配,这时候就可以使用匈牙利算法来实现。

原理不再赘述,直接显示代码:

from scipy.optimize import linear_sum_assignment
import numpy as np
# 先前的坐标
position_a = [[10,20],[20,30],[42,41]]
# 之后的坐标
position_b = [[14,24],[41,42],[20,31],[42,41]]
# 使用坐标计算代价矩阵
cost_matrix = [[np.power((np.array(a)-np.array(b)),2).sum() for a in position_a] for b in position_b ]
print("代价矩阵")
print(cost_matrix)
# 进行匈牙利算法匹配
row_ind, col_ind = linear_sum_assignment(cost_matrix)
for x,y in zip(row_ind, col_ind):
    print("列表B中的%s,应该与列表A中坐标%s匹配,距离消耗为%d"%(position_b[x],position_a[y],cost_matrix[x][y]))

结果:

代价矩阵
[[32, 72, 1073], [1445, 585, 2], [221, 1, 584], [1465, 605, 0]]
列表B中的[14, 24],应该与列表A中坐标[10, 20]匹配,距离消耗为32
列表B中的[20, 31],应该与列表A中坐标[20, 30]匹配,距离消耗为1
列表B中的[42, 41],应该与列表A中坐标[42, 41]匹配,距离消耗为0
原文地址:https://www.cnblogs.com/youmuchen/p/14660444.html