在张量中找到使值和最大化的枢轴

Find pivots in tensor that maximize sum of values

假设我有一个这样的矩阵:

[[15,10,8],
[11,5,8],
[9,14,4]]

我需要编写一个函数,对于每一行,returns 最大值的索引,而不重复相同的列索引。

鉴于前面的矩阵,最佳解决方案如下:

[[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.