如何提取具有多个条目的数组中的元素?

时间:2015-07-22 17:41:51

标签: arrays matlab

我有一个包含单调递增数据或重复数据的大型向量,看起来像这样:

data = [0 1.1 2.2 3.3 4.4 4.4 4.4 4.4 5.5 6.6 6.6 6.6 7.7];

在此数据集中,我对重复条目感兴趣(在本例中为4.46.6)。我有一个笨重的解决方案来提取这些值,但我觉得MATLAB应该有一个单行解决方案来提取结果,如

result = [4.4 6.6];

4 个答案:

答案 0 :(得分:13)

uniquediff的组合就足够了,find实际上并不是必需的。

out = unique(data(~diff(data)))

答案 1 :(得分:6)

这是另一种仅使用hist和索引的选项:

result = data(hist(data, data) > 1);

答案 2 :(得分:4)

我的一个班轮:

unique(data(find(diff(data)==0)))

测试here

<强>解释

  1. 使用diff,您可以获得从一个元素到下一个元素的差异。

  2. 由于数组先前已订购,上述行的结果将在重复的数据上输出零

  3. find(result_from_above == 0)我得到了他们居住的地方(索引 为零)

  4. 使用data(result_from_above)我得到重复的元素,然后 应用独特的来获得它们。

  5. <强>更新

    你可以使用逻辑索引,正如@rayryeng所说,你不需要find,然后就变成了:

    unique(data(diff(data)==0)); 
    

    然后测试here

答案 3 :(得分:3)

您可以执行以下操作。

[~,index]=unique(data);
unique(data(setdiff(1:length(data),index)))

index将包含唯一值的索引,setdiff将从1:length(data)向量中删除那些非唯一索引值的索引。然后使用data向量对其进行索引,并再次使用唯一值来获取。