【发布时间】:2019-08-19 20:52:03
【问题描述】:
我有两个长度不等的数组。假设 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 中执行此操作?
【问题讨论】:
-
这个问题是解决方案不是唯一的。考虑
A=[1 2 3 3 4], B=[3.1, 3.05, 2.9]:您可以从B中删除任意两个 元素。或者,对于更复杂的示例,A=[1 2 3 3.1 4], B=[3.1, 2.9, 5]:您可以从B中删除3.1,并从A中配对3,然后您就被卡住了。但是,如果您从B中删除2.9,并从A中删除3,您可以继续删除另一对(从A中删除3.1,从B中删除3.1)。所以我想说这个问题没有很好的定义。您需要指定您使用哪些解决方案/程序 -
@LuisMendo 好点。我们总是先删除 B 的较低值。所以 2.9 用 3 删除,然后 3.1 用 3.1 删除
-
B的低位是否与A的低位一起被删除?也就是说,对两个数组进行排序并在每个数组上从左到右进行? -
@LuisMendo 较低的 B 和较大的 A 。
-
您可能需要对已排序的数组应用一个循环,在每次迭代中从每个数组中删除一个元素,然后为下一次迭代处理缩减后的数组