Matlab(不同矩阵中的相同单元格)

时间:2014-11-18 22:42:15

标签: matlab cell

我有两个矩阵A和B.假设我想在矩阵A的每一行中找到最小的数字,并且对于这个数字在矩阵A中的相同单元格,确实找到相同单元格中的相应数字。矩阵B.例如,矩阵A中的数字将位于位置A(1,3),A(2,9)......并且我想要相应的数字在B(1,3),B(2,9)中)...是否可以这样做,或者我正在为matlab提出一些难题。希望有人能帮助我。

2 个答案:

答案 0 :(得分:2)

您可以使用min并找到每列所有行的最小值。实际上,您将使用第二个输出来查找要查找的每行的每个列的位置。找到这些内容后,只需使用sub2ind即可访问B中的相应值。因此,尝试这样的事情:

[~,ind] = min(A,[],2);
val = B(sub2ind(size(A), (1:size(A,1)).', ind));

val将包含矩阵B中的输出值,这些输出值对应于与A中每行的最小值相同的位置。这也假设AB的大小相同。举个例子,这是一个例子。我们将AB设置为随机的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