查找单元格向量的唯一值而不对结果进行排序

时间:2012-05-22 09:00:03

标签: matlab vector cell

我有一个字符串向量

          x = {'rrr' 'aaa' 'bbb' 'hhh' 'aaa' 'ppp'};
          y = unique(x);

此代码返回唯一值,但对它们进行排序。此代码的输出是

          y = {'aaa' 'bbb' 'hhh' 'ppp' 'rrr'}

我希望它返回顶部唯一值,但未排序。我想要的输出是

          y =  {'rrr' 'aaa' 'bbb' 'hhh' 'ppp'}

怎么做?

3 个答案:

答案 0 :(得分:4)

您可以使用unique的第二个输出参数,它返回唯一元素的索引。要以原始顺序显示它们,请在索引原始矢量之前使用索引向量上的sort函数。

 x = {'rrr' 'aaa' 'bbb' 'hhh' 'aaa' 'ppp'};
 [y,i] = unique(x);

 x(sort(i)) 

输出:

ans = 

    'rrr'    'bbb'    'hhh'    'aaa'    'ppp'

答案 1 :(得分:3)

This blog entry explains it very well:

    [X, SortVec] = sort(x);
    %Remove duplicates
    UV(SortVec) = ([1; diff(X)] ~= 0);
    %Resort to be back in original order
    y = B(UV);

答案 2 :(得分:3)

最新版本的MATLAB,R2012a,为执行exactly what you needunique命令提供了其他选项。对于旧版本,@ HMuster和@Dan有很好的答案。