我有两个长度不等的数组。说一个较长的A和一个较短的B。我希望从A和B中删除所有符合条件的元素-如果A中的值介于B中值的+/- 0.1之间,则从A和B中删除该元素。仅删除尽可能多的值从A到B,即存在非唯一元素。如果可以同时从A和B中删除多个元素,请先删除B的较小元素,再删除A的较大元素。
示例:
A = [ 1 2 3 3 4 ]
B = [ 3.1, 2.9, 5]
然后从A删除3和3,从B删除3.1和2.9。
如何在MATLAB中执行此操作?
答案 0 :(得分:0)
您可以使用ismembertol
:
A = [ 1 2 3 3 4 ];
B = [ 3.1, 2.9, 5];
Aind = ismembertol(A,B,0.1);
Bind = ismembertol(B,A,0.1);
A(Aind) = [];
B(Bind) = [];
ismembertol
使用容差(在这种情况下为0.1)进行比较
类似的结果也可以通过以下方式实现:
lim = 0.1+10^-10 % +10^-10 so we avoid the floating point precision error.
Aind = any(abs(A-B.')<=lim,1)
Bind = any(abs(A-B.')<=lim,2)
A(Aind) = []
B(Bind) = []
注意到第二种解决方案不是高效的内存。由于它创建了length(A)*length(B)
矩阵,因此仅适用于小型数组。