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


    遇到一个问题,有一个坐标列表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
  • 相关阅读:
    安卓AlertDialog的使用
    蚂蚁的腿
    年龄排序
    Digital Roots
    小明的存钱计划
    不高兴的小明
    管闲事的小明
    小明的调查作业
    爱摘苹果的小明
    小明的难题
  • 原文地址:https://www.cnblogs.com/youmuchen/p/14660444.html
Copyright © 2020-2023  润新知