Tôi đã hy vọng rằng phiên bản mới hơn scipy.optimize.linear_sum_assignment
sẽ là nhanh nhất, nhưng (có lẽ không đáng ngạc nhiên) các Cython library (mà không có hỗ trợ pip) là nhanh hơn đáng kể, ít nhất là đối với trường hợp sử dụng của tôi:
$ python -m timeit -s 'from scipy.optimize import linear_sum_assignment; import numpy as np; np.random.seed(0); c = np.random.rand(20,30)' 'a,b = linear_sum_assignment(c)'
100 loops, best of 3: 3.43 msec per loop
$ python -m timeit -s 'from munkres import munkres; import numpy as np; np.random.seed(0); c = np.random.rand(20,30)' 'a = munkres(c)'
10000 loops, best of 3: 139 usec per loop
$ python -m timeit -s 'from scipy.optimize import linear_sum_assignment; import numpy as np; np.random.seed(0);' 'c = np.random.rand(20,30); a,b = linear_sum_assignment(c)'
100 loops, best of 3: 3.01 msec per loop
$ python -m timeit -s 'from munkres import munkres; import numpy as np; np.random.seed(0)' 'c = np.random.rand(20,30); a = munkres(c)'
10000 loops, best of 3: 127 usec per loop
tôi thấy kết quả tương tự cho các kích thước giữa 2x2 và 100x120 (10-40x nhanh hơn).
Thật là một sự xấu hổ nó không được thực hiện với NumPy. Không chỉ nó có thể nhanh hơn, nhưng thuật toán cũng phải dễ dàng hơn nhiều để thể hiện với sự numpy. – u0b34a0f6ae