假设我有一个这样的矩阵:
[[15,10,8],
[11,5,8],
[9,14,4]]
我需要写一个函数,对于每一行,返回最大值的索引,而不重复相同的列索引。
给定前面的矩阵,最佳解如下:
[[0,0],
[1,2],
[2,1]]
这是因为这些指标给出的值的和是(15+8+14 = 37),并且求和元素的指标在输出张量中不会重复。
这在损失函数中是需要的,所以我只需要在tensorflow中写出来。
感谢这叫做分配问题。这可以作为LP(线性规划)问题来解决:
max sum((i,j), a[i,j]*x[i,j])
subject to
sum(j, x[i,j]) = 1 ∀i
sum(i, x[i,j]) = 1 ∀j
x[i,j] ∈ [0,1]
可以用任意LP求解器求解。
对于赋值问题也有专门的算法。例如:https://docs.scipy.org/doc/scipy-0.18.1/reference/generated/scipy.optimize.linear_sum_assignment.html。