我有一个字符串向量
x = {'rrr' 'aaa' 'bbb' 'hhh' 'aaa' 'ppp'};
y = unique(x);
此代码返回唯一值,但对它们进行排序。此代码的输出是
y = {'aaa' 'bbb' 'hhh' 'ppp' 'rrr'}
我希望它返回唯一值,但未排序。我想要的输出是
y = {'rrr' 'aaa' 'bbb' 'hhh' 'ppp'}
这个怎么做?
您可以使用 的第二个输出参数unique,它返回唯一元素的索引。要以原始顺序显示它们,请sort在索引原始向量之前对索引向量使用该函数。
x = {'rrr' 'aaa' 'bbb' 'hhh' 'aaa' 'ppp'};
[y,i] = unique(x);
x(sort(i))
输出:
ans =
'rrr' 'bbb' 'hhh' 'aaa' 'ppp'
最新版本的 MATLAB R2012a 具有额外的unique命令选项,可以完全满足您的需求。对于旧版本,@HMuster 和 @Dan 有很好的答案。
[X, SortVec] = sort(x);
%Remove duplicates
UV(SortVec) = ([1; diff(X)] ~= 0);
%Resort to be back in original order
y = B(UV);