I have two matrices (size 4x4) and I want to find the minimum between the two. For example:
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 ];
Now, if I did a min(A,B)
in Octave, it gives me
[ 1, 1, 4, 5;
0, 2, 0, 3;
5, 6, 5, 1;
0, 1, 0, 3 ]
Is there a way to get the matrix that 'won', by which I mean which matrix contained the minimum, in each element-wise comparison?
Like, for the first element of both matrices, matrix B
won and so on.
I don't want to loop through the matrices.
You can compare A
and B
to find out in which matrix the minimum occurred.
With A > B
, you will get a matrix containing False
if the entry from A
was chosen, and True
if the entry from B
was chosen. By adding 1
to it, you will get 1
if A
was chosen and 2
if B
was chosen.
>> 1 + (A > B)
ans =
2 2 1 1
2 1 1 2
2 2 1 2
1 1 1 1
Alternatively, you can concatenate A
and B
to form a 3-dimensional array with dimensions [4, 4, 2]
, where C(:, :, 1) = A
and where C(:, :, 2) = B
. Then you can call min
on this matrix C
along the third axis. When calling min
on one matrix, you can get the index of the "winner" directly as a second return value:
>> 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