在两个数组中删除满足条件的元素MATLAB

时间:2019-08-19 20:52:03

标签: arrays matlab sorting

我有两个长度不等的数组。说一个较长的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中执行此操作?

1 个答案:

答案 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)矩阵,因此仅适用于小型数组。