2016-04-22 240 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