使用容差值求两个数组的交集

3
我有两个数据数组,想要提取它们共同的元素。Matlab的intersect可以实现这一功能。但是它只返回完全相同的元素。如果我想提取一些带有容差的元素怎么办?例如:
A = [1 2 3.0002 4.125 5.89]; 
B = [2 3.012 4.126]

我希望提取小数点后两位相同的元素。因此,我希望答案是 [2 4.12]。有没有内置函数可以实现这个功能?或者我该如何实现呢?

2个回答

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));

4
我会将输入值进行四舍五入处理:

只需使用 round 函数:

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

floorceil也是可选项,具体取决于您想要实现的目标。


对于早于2014b版本的Matlab,请使用C = intersect(round(A*10^n)/10^n,round(B*10^n)/10^n),其中n是您希望元素相同的小数位数。 - Rhinocerotidae

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接