我有一个包含单调递增数据或重复数据的大型向量,看起来像这样:
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.4
和6.6
)。我有一个笨重的解决方案来提取这些值,但我觉得MATLAB应该有一个单行解决方案来提取结果,如
result = [4.4 6.6];
答案 0 :(得分:13)
答案 1 :(得分:6)
这是另一种仅使用hist
和索引的选项:
result = data(hist(data, data) > 1);
答案 2 :(得分:4)
我的一个班轮:
unique(data(find(diff(data)==0)))
测试here!
<强>解释强>
使用diff
,您可以获得从一个元素到下一个元素的差异。
由于数组先前已订购,上述行的结果将在重复的数据上输出零。
find(result_from_above == 0)
我得到了他们居住的地方(索引
为零)
使用data(result_from_above)
我得到重复的元素,然后
应用独特的来获得它们。
<强>更新强>
你可以使用逻辑索引,正如@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
向量对其进行索引,并再次使用唯一值来获取。