我有两个矩阵A和B.假设我想在矩阵A的每一行中找到最小的数字,并且对于这个数字在矩阵A中的相同单元格,确实找到相同单元格中的相应数字。矩阵B.例如,矩阵A中的数字将位于位置A(1,3),A(2,9)......并且我想要相应的数字在B(1,3),B(2,9)中)...是否可以这样做,或者我正在为matlab提出一些难题。希望有人能帮助我。
答案 0 :(得分:2)
您可以使用min
并找到每列所有行的最小值。实际上,您将使用第二个输出来查找要查找的每行的每个列的位置。找到这些内容后,只需使用sub2ind
即可访问B
中的相应值。因此,尝试这样的事情:
[~,ind] = min(A,[],2);
val = B(sub2ind(size(A), (1:size(A,1)).', ind));
val
将包含矩阵B
中的输出值,这些输出值对应于与A
中每行的最小值相同的位置。这也假设A
和B
的大小相同。举个例子,这是一个例子。我们将A
和B
设置为随机的4 x 4整数数组。
rng(123);
A = randi(10, 4, 4)
B = randi(10, 4, 4)
A =
7 8 5 5
3 5 4 1
3 10 4 4
6 7 8 8
B =
2 7 8 3
2 9 4 7
6 8 4 1
6 7 3 5
通过运行第一行代码,我们得到了这个:
[~,ind] = min(A,[],2)
ind =
3
4
1
1
这告诉我们第一行的最小值是第三列,下一行的最小值是第四列,依此类推。获得这些列号后,让我们访问B
中相应值的内容,因此我们需要行(1,3)
,(2,4)
等。因此,运行后第二个陈述,我们得到:
val = B(sub2ind(size(A), (1:size(A,1)).', ind))
val =
8
7
6
6
如果您与B
相比,A
快速仔细检查所访问的位置,我们就会在B
中找到与A
对应的确切位置。
答案 1 :(得分:1)
A = randi(9,[5 5]);
B = randi(9,[5 5]);
[C,I] = min(A');
B.*(A == repmat(C',1,size(A,2)))
例如,
A =
2 1 6 9 1
2 4 4 4 2
5 6 5 5 5
9 3 9 3 6
4 5 6 8 3
B =
3 5 6 8 1
9 2 9 7 1
5 6 6 5 6
4 6 1 4 5
5 3 7 1 9
ans =
0 5 0 0 1
9 0 0 0 1
5 0 6 5 6
0 6 0 4 0
0 0 0 0 9
您可以像使用
一样使用它B(A == repmat(C',1,5))
ans =
9
5
5
6
6
5
4
1
1
6
9