匈牙利算法解决两个坐标列表匹配的问题
遇到一个问题,有一个坐标列表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