2016-04-22 142 views
0

我有两个不同尺寸的矩阵共同的元素,例如:寻找在不同尺寸的矩阵

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

我想比较这两个矩阵,找出相同的价值观,并将其存储在一个新的变量。结果应该是这样的:

C = [10 15 43]; 

因为我是MATLAB的新用户,如果有人给我关于这个问题的想法,这将是很好的。提前致谢。

+0

你想要的是类似的值是在B. A的值也在相同的位置或类似的价值? – excaza

回答

5

如果2个数组的大小是相同的,只是做:

C = find(A==B); 

它发现满足测试A==B所有元素;该测试是以元素方式执行的:输出是与输入数组的大小相同的掩码,其中每个元素如果是A(i)==B(i)则为真。

对于非同等大小的数组,一个解决方法是调用该函数intersect

C = intersect(A,B); 

这不正是你想要的东西,得到在A和B的共同价值观注意输出值进行排序。正如评论由excaza说,这是可能得到的共同价值观以相同的顺序按它们出现在参数(A在这个例子中)通过了第一个数组中,通过添加选项'stable'的号召:

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

我的数组大小不一样。这是问题@ Bentoy13 –

+0

哦,我读得太快了。给我几分钟。 – Bentoy13

+1

将[''stable''' setOrder'参数传递给'intersect'](http://www.mathworks.com/help/matlab/ref/intersect.html?refresh=true#inputarg_setOrder)将返回与A的顺序相同。它也可能值得澄清'find'方法中'元素智能'的含义,熟悉数组操作但对新用户不一定熟悉的人员很直观。 – excaza

0

到Bentoy13的解决方案另一种方法是使用功能ismember

C = A(ismember(A,B)) 

它主要负责

+0

我不知道这是如何得到一个downvote,它是完全正确的 – Dan