Scipy-线性和分配-显示工作原理

问题描述

我正在尝试学习匈牙利算法的各种实现。具体来说,我想最大化并获得最高分数。

我从各种软件包中找到了两种解决方案:(1)munkres软件包,以及(2)Scipy中的线性和分配

(1)http://software.clapper.org/munkres/ (2)https://docs.scipy.org/doc/scipy-0.18.1/reference/generated/scipy.optimize.linear_sum_assignment.html

我能够与#1结合在一起,但是在实现中发现问题(https://github.com/bmc/munkres/issues/39)。因此,我现在尝试使用选项#2。

这是我到目前为止的内容

import numpy as np
from scipy.optimize import linear_sum_assignment

matrix = np.array([
    [10.01,10.02,8.03,11.04],[9.05,8.06,500.07,1.08],[9.09,7.11,4.11,1000.12]
])

row_ind,col_ind = linear_sum_assignment(matrix,maximize=True) 
print('\nSolution:',matrix[row_ind,col_ind].sum())

它返回1510.21的正确解。

我将不胜感激:

我一直在努力展示作品。理想情况下,我要查看的是匹配的行和列对以及得分。在此示例中,将为:

(0,1) (10.02)
(1,2) (500.07)
(2,3) (1000.12)

这与munkres程序包(上面详细介绍的#1)非常直接,但是我一直在努力使如何使用scipy实现这一工作。

感谢您的帮助

解决方法

使用类似这样的东西后,我可以得到自己的样子:-

for i in range(len(row_ind)):
    print("row: ",row_ind[i],"  col: ",col_ind[i],"  value: ",matrix[i,col_ind[i]] )

这将返回值在矩阵中的位置。