3

我有一个字符串向量

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

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

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

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

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

这个怎么做?

4

3 回答 3

4

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

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

 x(sort(i)) 

输出:

ans = 

    'rrr'    'bbb'    'hhh'    'aaa'    'ppp'
于 2012-05-22T09:09:16.170 回答
3

最新版本的 MATLAB R2012a 具有额外的unique命令选项,可以完全满足您的需求。对于旧版本,@HMuster 和 @Dan 有很好的答案。

于 2012-05-22T10:29:38.550 回答
3

这篇博文解释得很好:

    [X, SortVec] = sort(x);
    %Remove duplicates
    UV(SortVec) = ([1; diff(X)] ~= 0);
    %Resort to be back in original order
    y = B(UV);
于 2012-05-22T09:09:36.530 回答