两个多维矩阵的最小值,其中矩阵'won'(包含最小值)

Minimum of two multidimensional matrices, with which matrix 'won' (contained the minimum)

我有两个矩阵(大小为 4x4),我想找到两者之间的最小值。例如:

A = [ 3, 2, 4, 5;              
      1, 2, 0, 6;                   
      9, 8, 5, 4;                   
      0, 1, 0, 3 ];               

B = [ 1, 1, 6, 8;
      0, 4, 6, 3;
      5, 6, 7, 1;
      0, 2, 3, 4 ];

现在,如果我在 Octave 中做了一个 min(A,B),它会给我

[ 1, 1, 4, 5;
  0, 2, 0, 3;
  5, 6, 5, 1;
  0, 1, 0, 3 ]

有没有办法在每个元素比较中得到 'won' 的矩阵,我的意思是哪个矩阵包含最小值?

比如,对于两个矩阵的第一个元素,矩阵 B 获胜等等。 我不想遍历矩阵。

您可以比较 AB 以找出最小值出现在哪个矩阵中。 使用 A > B,如果选择 A 中的条目,您将得到一个包含 False 的矩阵,如果选择 B 中的条目,您将得到一个包含 True 的矩阵。通过向其中添加 1,如果选择 A,您将得到 1,如果选择 B,您将得到 2

>> 1 + (A > B)
ans =
   2   2   1   1
   2   1   1   2
   2   2   1   2
   1   1   1   1

或者,您可以连接 AB 以形成维度为 [4, 4, 2] 的 3 维数组,其中 C(:, :, 1) = AC(:, :, 2) = B。然后你可以沿着第三个轴在这个矩阵C上调用min。在一个矩阵上调用 min 时,可以直接获取 "winner" 的索引作为第二个 return 值:

>> C = cat(3, A, B);
>> [res, idx] = min(C, [], 3)
res =
   1   1   4   5
   0   2   0   3
   5   6   5   1
   0   1   0   3

idx =
   2   2   1   1
   2   1   1   2
   2   2   1   2
   1   1   1   1