【发布时间】:2018-12-19 04:20:03
【问题描述】:
我正在尝试使用以下规则从一组键和值中删除具有容差的重复项:
假设以下集合:
keys = [1 2 3 3.1 3.15 4 5];
vals = [0.8 1 1.1 1.3 1.2 1 1.1];
现在我想删除那些键非常靠近的对,如图中红色圆圈所示。我想保留的键值对是具有最大值的键值对(在示例中是中间一个 [3.1; 1.3]),因此结果集将是:
keys = [1 2 3.1 4 5];
vals = [0.8 1 1.3 1 1.1];
我尝试使用 Matlab 的 diff 函数来获得这种行为
vals_new = keys(~(diff(keys) < 0.5));
keys_new = vals(~(diff(keys) < 0.5));
[M,I] = max(vals(diff(keys) < 0.5));
这将 vals_new 和 keys_new 作为一个新集合,它只包含最后一个重复对,但也缺少最后一个值:
keys_new = [1 2 3.15 4]
vals_new = [0.8 1 1.2 1]
最后一行返回重复对I=2 的最大值的索引,但遗憾的是不包括三个重复对中的最后一个[3.15; 1.2],所以这里是正确的更多的是巧合。
我觉得应该有一个更聪明的方法来做到这一点,但我无法真正理解它。
【问题讨论】:
标签: arrays matlab duplicates