cost, row_ind, col_ind = lapjv(cost_matrix)
print(f"行分配: {row_ind}") # 每一行映射到的最优列
print(f"列分配: {col_ind}") # 每一列映射到的最优行
所以,row_ind[i]是第i行对应的列索引,而 col_ind[j]是第j列对应的行索引。
对于linear_sum_assignment的row_ind和col_ind,根据scipy的文档,返回的row_ind和col_ind是行和列的索引对
def example_compare2():
a = np.array([
[1.46439595e+03, 2.69431832e+03, 1.29987563e-01, 1.55361073e+03, 1.44865847e+03, 3.10717022e+03,
2.57535292e+03],
[2.57436453e+03, 3.10716454e+03, 1.44876144e+03, 1.55268757e+03, 2.47319823e-02, 2.69476280e+03,
1.46539683e+03],
[1.76492370e-01, 1.64718736e+03, 1.46437509e+03, 1.55696505e+03, 2.57452162e+03, 2.79781559e+03,
3.09548074e+03],
[3.09534496e+03, 2.79864587e+03, 2.57524914e+03, 1.55557721e+03, 1.46499350e+03, 1.64802488e+03,
4.88675400e-01],
[1.55677233e+03, 1.55718485e+03, 1.55318774e+03, 5.25698984e-01, 1.55220347e+03, 1.55606378e+03,
1.55539410e+03],
[1.64741113e+03, 3.21426508e-01, 2.69453589e+03, 1.55685445e+03, 3.10730844e+03, 1.65236984e+03,
2.79834747e+03],
[2.79802807e+03, 1.65309575e+03, 3.10731726e+03, 1.55578018e+03, 2.69459113e+03, 5.78065695e-01, 1.64716845e+03]
])
# 使用 lapjv
c, row_ind_lapjv, col_ind_lapjv = lapjv(a)
lapjv_total_cost = a[np.arange(len(row_ind_lapjv)), row_ind_lapjv].sum()
print("lapjv分配结果:")
print(f"行分配(row_ind): {row_ind_lapjv}")
print(f"列分配(col_ind): {col_ind_lapjv}")
print(f"总代价: {lapjv_total_cost}")
# 使用 linear_sum_assignment
row_ind_linear, col_ind_linear = linear_sum_assignment(a)
linear_sum_assignment_total_cost = a[row_ind_linear, col_ind_linear].sum()
print("\nlinear_sum_assignment分配结果:")
print(f"行分配(row_ind): {row_ind_linear}")
print(f"列分配(col_ind): {col_ind_linear}")
print(f"总代价: {linear_sum_assignment_total_cost}")
lapjv分配结果:
行分配(row_ind): [2 4 0 6 3 1 5]
列分配(col_ind): [2 5 0 4 1 6 3]
总代价: 2.2450785023
linear_sum_assignment分配结果:
行分配(row_ind): [0 1 2 3 4 5 6]
列分配(col_ind): [2 4 0 6 3 1 5]
总代价: 2.2450785023
遇到的问题:
用linear_sum_assignment时出现了gui退出报错的问题,原因暂时未知,而且错误不是每次都报,不好解决。所以用lapjv代替。
Process finished with exit code -1073741819 (0xC0000005)