KM.py 1.1 KB

1234567891011121314151617181920212223242526272829303132
  1. import numpy as np
  2. from scipy.optimize import linear_sum_assignment
  3. class KM():
  4. def __init__(self, graph):
  5. self.gragh = graph
  6. self.gragh2 = graph
  7. print(graph)
  8. a = len(graph)
  9. b = len(graph[0])
  10. print(a)
  11. print(b)
  12. self.n = max(a,b)
  13. if a > b:
  14. graph = [row + [0] * (a - b) for row in graph]
  15. elif a < b :
  16. for i in range(b-a):
  17. graph = graph + [[0] * b]
  18. self.gragh = np.array(graph)
  19. # self.left_label = np.max(self.gragh,axis=1)
  20. # self.right_label = np.zeros(self.n)
  21. def compute(self):
  22. self.gragh = -self.gragh
  23. print(self.gragh.shape)
  24. row,col = linear_sum_assignment(self.gragh)
  25. print("行坐标:", row, "列坐标:", col, "最大组合:", self.gragh[row, col])
  26. row,col = linear_sum_assignment(-np.array(self.gragh2))
  27. print("行坐标:", row, "列坐标:", col, "最大组合:", self.gragh[row, col])
  28. return [(i,j)for i,j,value in zip(row,col,self.gragh[row,col]) if value]