【问题标题】:Finding common elements in matrices of different size在不同大小的矩阵中查找共同元素
【发布时间】:2016-04-22 08:57:07
【问题描述】:

我有两个不同大小的矩阵,例如:

A = [10 12 15 16 17 43 77];
B = [10 11 15 20 43 55 222 90 86];

我想比较这两个矩阵以找出相同的值并将它们存储在一个新变量中。结果应如下所示:

C = [10 15 43];

由于我是 MATLAB 的新用户,如果有人能就这个问题给我一些想法,那就太好了。提前致谢。

【问题讨论】:

  • 您想要相同位置的相似值还是只是相似值?

标签: matlab set-intersection


【解决方案1】:

如果两个数组的大小相同,只需这样做:

C = find(A==B);

它找到满足测试A==B的所有元素;该测试是按元素执行的:输出是与输入数组大小相同的掩码,如果A(i)==B(i),则每个元素都为真。

对于大小不等的数组,解决方法是调用函数intersect

C = intersect(A,B);

它完全符合您的要求,获取 A 和 B 中的公共值。请注意,输出值已排序。正如 cmets 中的 excaza 所述,通过在调用中添加选项 'stable',可以按照它们在传入参数的第一个数组中出现的顺序(在此示例中为 A)获取公共值:

C = intersect(A,B,'stable');

【讨论】:

  • 我的数组大小不同。这就是问题@Bentoy13
  • 传递 'stable' setOrder parameter to intersect 以与 A 相同的顺序返回值。对于 find 方法,您可能还需要澄清“元素明智”的含义,这对于熟悉的人来说很直观使用数组操作,但不一定适用于新用户。
【解决方案2】:

Bentoy13 的解决方案的替代方案是使用函数ismember

C = A(ismember(A,B))

它基本上采用 B 中的 A 的值。

【讨论】:

  • 我不知道这是怎么被否决的,完全正确
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-19
  • 1970-01-01
  • 2021-08-19
  • 2021-05-19
  • 1970-01-01
  • 2017-03-13
相关资源
最近更新 更多