Минимум двух многомерных матриц, с которыми матрица «выиграла» (содержала минимум) - PullRequest
0 голосов
/ 04 мая 2018

У меня есть две матрицы (размер 4х4), и я хочу найти минимум между ними. Например:

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

Теперь, если я сделал min(A,B) в Октаве, это даст мне

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

Есть ли способ получить матрицу, которая "выиграла", под которой я подразумеваю, какая матрица содержала минимум, в каждом поэлементном сравнении?

Например, для первого элемента обеих матриц матрица B выиграла и так далее. Я не хочу перебирать матрицы.

1 Ответ

0 голосов
/ 04 мая 2018

Вы можете сравнить A и B, чтобы выяснить, в какой матрице произошел минимум. С 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

Кроме того, вы можете объединить A и B, чтобы сформировать трехмерный массив с размерами [4, 4, 2], где C(:, :, 1) = A и где C(:, :, 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...