我有两个矩阵(大小为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
赢了,等等。
我不想循环遍历矩阵。
答案 0 :(得分:2)
您可以比较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