至少有两个多维矩阵,矩阵'赢得' (包含最小值)

时间:2018-05-04 06:32:23

标签: matlab multidimensional-array octave 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 ]

有没有办法让每个元素比较的矩阵“赢得”,我指的是哪个矩阵包含最小值?

就像,对于两个矩阵的第一个元素,矩阵B赢了,等等。 我不想循环遍历矩阵。

1 个答案:

答案 0 :(得分:2)

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

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

或者,您可以连接AB以形成尺寸为[4, 4, 2]的三维数组,其中C(:, :, 1) = AC(:, :, 2) = B。然后,您可以沿着第三个轴在此矩阵min上调用C。在一个矩阵上调用min时,您可以获得"胜利者"的索引。直接作为第二个返回值:

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