zoukankan      html  css  js  c++  java
  • 匈牙利算法解决两个坐标列表匹配的问题

    遇到一个问题,有一个坐标列表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
  • 相关阅读:
    WebApi 安全认证
    Autofac 学习
    autofac实现批量注入
    Autofac -入门练习
    Struts2 Namespace_命名空间
    Deployment failure on Tomcat 6.x. Could not copy all resources
    chm 已取消到该网页的导航 或者 无法显示网页 的问题
    GPT 分区详解
    mount 中文手册
    rpm 中文手册
  • 原文地址:https://www.cnblogs.com/youmuchen/p/14660444.html
Copyright © 2011-2022 走看看