2017-06-16 33 views
2

我有2個數據數組,我想從中提取公共元素。 Matlab的intersect完成這項工作。但它返回的是完全相同的元素。如果我想提取具有一定寬容度的元素,該怎麼辦?舉例來說,如用容差相交兩個數組

A = [1 2 3.0002 4.125 5.89]; 
B = [2 3.012 4.126] 

我想提取相同的元素最多2個小數位。所以我想要的答案是[2 4.12]。有沒有內置的功能來做到這一點?或者我如何實現這一目標?

回答

4

我只想round輸入:

C = intersect(round(A,2),round(B,2)) 

floorceil也是選項,這取決於你真正想要什麼實現。

+0

對於早於2014b的matlab版本,使用'C = intersect(round(A * 10^n)/ 10^n,round(B * 10^n)/ 10^n)',其中'n'是數字你希望你的元素是相同的小數位。 – Rhinocerotidae

4

您可以手動進行如下操作。這會從A中選取輸出值;如果你想從B回暖只是交換AB代碼:

A = [1 2 3.0002 4.125 5.89]; 
B = [2 3.012 4.126]; 
tol = .01; 
result = A(any(abs(bsxfun(@minus, A(:).', B(:))) < tol, 1));