【问题标题】:Matlab(the same cell in different matrix)Matlab(不同矩阵中的相同单元格)
【发布时间】:2014-11-19 06:55:24
【问题描述】:

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

【问题讨论】:

  • 你能举例说明你想做什么吗?

标签: matlab cell


【解决方案1】:

您可以做的是使用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

如果您快速仔细检查BA 中的访问位置,我们会在B 中找到与A 相对应的位置。

【讨论】:

  • 这就像你已经准备好答案并等待问题!不错的一个 +1。
  • @user3714919 不客气。如果这是您正在寻找的答案,请考虑接受它:)
【解决方案2】:
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

【讨论】:

  • 输出应该是一个矩阵,还是应该是从A提取的值的向量?
  • 哈哈哈我也是!让我们看看 OP 怎么说。
  • 小记。使用bsxfun 以提高效率。类似:B.*bsxfun(@eq, A, C.'); 它阻止了 repmatbsxfun 在引擎盖下处理。顺便说一句,你也 +1。
  • 感谢卡姆塔尔。我想要它在一个向量中。 rayryeng 提出的解决方案正是我想要的。感谢您的宝贵时间。
  • @user3714919,随时。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-08
  • 1970-01-01
  • 2017-09-23
  • 1970-01-01
  • 2011-03-04
相关资源
最近更新 更多