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

の 2 番目の出力引数を使用できます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 に答える