Main Content

unique

説明

C = unique(A)A と同じデータを、繰り返しを除いて返します。C は並べ替られた順序になります。

  • A が table または timetable の場合、uniqueA の一意の行を並べ替えられた順序で返します。timetable の場合、unique は、行が一意であるかどうかを判別するときに行時間と行の値を考慮し、出力 timetable C を行時間で並べ替えます。

  • A が categorical 配列の場合、並べ替え順序はカテゴリの順序で決まります。

C = unique(A,setOrder) は、A の一意の値を特定の順序で返します。setOrder には 'sorted' (既定) または 'stable' を指定できます。

C = unique(A,occurrence) は、繰り返しの値が存在する場合に返すインデックスを指定します。occurrence には 'first' (既定) または 'last' を指定できます。

C = unique(A,___,'rows')C = unique(A,'rows',___) は、A の各行を単一のエンティティとして扱い、A の一意の行を並べ替えられた順序で返します。A の指定は必須ですが、setOrder または occurrence はオプションで指定できます。

'rows' オプションは cell 配列をサポートしません。

[C,ia,ic] = unique(___) はまた、前述の任意の構文を使用してインデックス ベクトル ia および ic も返します。

  • A がベクトルの場合、C = A(ia) かつ A = C(ic) です。

  • A が行列または配列の場合、C = A(ia) かつ A(:) = C(ic) です。

  • 'rows' オプションが指定されている場合、C = A(ia,:) および A = C(ic,:) です。

  • A が table または timetable の場合、C = A(ia,:) かつ A = C(ic,:) です。

[C,ia,ic] = unique(A,'legacy')[C,ia,ic] = unique(A,'rows','legacy')[C,ia,ic] = unique(A,occurrence,'legacy') および [C,ia,ic] = unique(A,'rows',occurrence,'legacy') は、R2012b およびそれ以前のリリースの関数 unique の動作を維持します。

'legacy' オプションは categorical 配列、datetime 配列、duration 配列、calendarDuration 配列、table、timetable をサポートしません。

すべて折りたたむ

繰り返しの値を含むベクトルを定義します。

A = [9 2 9 5];

A の一意の値を求めます。

C = unique(A)
C = 1×3

     2     5     9

繰り返しのデータをいくつか含むテーブルを作成します。

Name = {'Fred';'Betty';'Bob';'George';'Jane'};
Age = [38;43;38;40;38];
Height = [71;69;64;67;64];
Weight = [176;163;131;185;131];
A = table(Age,Height,Weight,'RowNames',Name)
A=5×3 table
              Age    Height    Weight
              ___    ______    ______

    Fred      38       71       176  
    Betty     43       69       163  
    Bob       38       64       131  
    George    40       67       185  
    Jane      38       64       131  

A の一意の行を検出します。unique は、最初に変数 Age、その次に 2 番目の変数 Height に基づいて、並べ替えられた順序に A の行を返します。

C = unique(A)
C=4×3 table
              Age    Height    Weight
              ___    ______    ______

    Bob       38       64       131  
    Fred      38       71       176  
    George    40       67       185  
    Betty     43       69       163  

最初の変数 Age の値が一意であるテーブルの行を検出します。1 つのテーブル変数に一意の値を格納するだけであれば、unique で返されるインデックスを使用してそれらの行をテーブルから抽出できます。

[C,ia] = unique(A.Age);
B = A(ia,:)
B=3×3 table
              Age    Height    Weight
              ___    ______    ______

    Fred      38       71       176  
    George    40       67       185  
    Betty     43       69       163  

繰り返しの値を含むベクトルを定義します。

A = [9 2 9 5];

A の一意の値および C = A(ia) および A = C(ic) であるインデックス ベクトル iaic を求めます。

[C, ia, ic] = unique(A)
C = 1×3

     2     5     9

ia = 3×1

     2
     4
     1

ic = 4×1

     3
     1
     3
     2

繰り返しの行をいくつか含む 10 行 3 列の行列を作成します。

A = randi(3,10,3)
A = 10×3

     3     1     2
     3     3     1
     1     3     3
     3     2     3
     2     3     3
     1     1     3
     1     2     3
     2     3     2
     3     3     2
     3     3     1

最初の 2 列のデータに基づいて A の一意の行を求めます。インデックス ベクトルの iaic を返すために 3 つの出力を指定します。

[C,ia,ic] = unique(A(:,1:2),'rows')
C = 7×2

     1     1
     1     2
     1     3
     2     3
     3     1
     3     2
     3     3

ia = 7×1

     6
     7
     3
     5
     1
     4
     2

ic = 10×1

     5
     7
     3
     6
     4
     1
     2
     4
     7
     7

ia を使用して A のインデックスを指定し、最初の 2 列に一意の要素の組み合わせをもつ行を取得します。

uA = A(ia,:)
uA = 7×3

     1     1     3
     1     2     3
     1     3     3
     2     3     3
     3     1     2
     3     2     3
     3     3     1

ベクトル内の一意の要素を検出し、それぞれの一意の要素の出現回数を accumarray を使用してカウントします。

1 ~ 5 のランダムな整数から成るベクトルを作成します。

a = randi([1 5],200,1);

ベクトル内の一意の要素を検出します。インデックス ベクトルの iaic を返します。

[C,ia,ic] = unique(a);

C の各要素の a での出現回数をカウントします。icaccumarray の最初の入力、1 を 2 番目の入力として指定し、関数で ic の添字の繰り返しがカウントされるようにします。結果を集計します。

a_counts = accumarray(ic,1);
value_counts = [C, a_counts]
value_counts = 5×2

     1    46
     2    36
     3    38
     4    39
     5    41

setOrder 引数を使って C の値の順序を指定します。

C の値を A の値と同じ順序にする場合、'stable' を指定します。

A = [9 2 9 5];
[C, ia, ic] = unique(A,'stable')
C = 1×3

     9     2     5

ia = 3×1

     1
     2
     4

ic = 4×1

     1
     2
     1
     3

または、関数 'sorted' を指定できます。

[C, ia, ic] = unique(A,'sorted')
C = 1×3

     2     5     9

ia = 3×1

     2
     4
     1

ic = 4×1

     3
     1
     3
     2

NaN を含むベクトルを定義します。

A = [5 5 NaN NaN];

A の一意の値を求めます。

C = unique(A)
C = 1×3

     5   NaN   NaN

uniqueNaN 値を個別のものとして処理します。

ベクトル x を作成します。x の変換と復元を実行して、2 番目のベクトル y を取得します。この変換により y で丸め誤差が生じます。

x = (1:6)'*pi;
y = 10.^log10(x);

この誤差を求め、xy が同一でないことを検証します。

x-y
ans = 6×1
10-14 ×

    0.0444
         0
         0
         0
         0
   -0.3553

unique を使用して、連結ベクトル [x;y] 内の一意の要素を検出します。関数 unique は厳密な比較を実行し、x の一部の値が y の値と厳密には等しくないと判定します。これらは、x-y の差が非ゼロである、同じ要素です。したがって、c には重複しているように "見える" 値が含まれています。

c = unique([x;y])
c = 8×1

    3.1416
    3.1416
    6.2832
    9.4248
   12.5664
   15.7080
   18.8496
   18.8496

uniquetol を使用して、わずかな誤差が許容される比較を実行します。uniquetol は許容誤差内にある要素を等価として扱います。

C = uniquetol([x;y])
C = 6×1

    3.1416
    6.2832
    9.4248
   12.5664
   15.7080
   18.8496

文字ベクトルの cell 配列を作成します。

A = {'one','two','twenty-two','One','two'};

A に含まれる一意の文字ベクトルを検索します。

C = unique(A)
C = 1x4 cell
    {'One'}    {'one'}    {'twenty-two'}    {'two'}

文字ベクトルの cell 配列 A を作成します。一部のベクトルは末尾に空白文字があります。

A = {'dog','cat','fish','horse','dog ','fish '};

A に含まれる一意の文字ベクトルを検索します。

C = unique(A)
C = 1x6 cell
    {'cat'}    {'dog'}    {'dog '}    {'fish'}    {'fish '}    {'horse'}

unique は、文字ベクトルの cell 配列内の末尾の空白文字を別個の文字として処理します。

'legacy' フラグを使用して、コード内の R2012b およびそれ以前のリリースの unique の動作を保持します。

現在の動作における A の一意の要素を検出します。

A = [9 2 9 5];
[C1, ia1, ic1] = unique(A)
C1 = 1×3

     2     5     9

ia1 = 3×1

     2
     4
     1

ic1 = 4×1

     3
     1
     3
     2

A の一意の要素を検出し、レガシ動作を保持します。

[C2, ia2, ic2] = unique(A, 'legacy')
C2 = 1×3

     2     5     9

ia2 = 1×3

     2     4     3

ic2 = 1×4

     3     1     3     2

入力引数

すべて折りたたむ

入力配列。

  • A が table の場合、unique では行の名前が考慮されません。値が同じで名前が異なる 2 つの行は、等しいと見なされます。

  • A が timetable の場合、unique は行時間を考慮します。値が同じで時間が異なる 2 つの行は、等しいとは見なされません。

  • A が categorical 配列の場合、並べ替え順序はカテゴリの順序で決まります。categorical 配列の並べ替え順序を確認するには、関数 categories を使用します。

また、A は次のクラス メソッドをもつオブジェクトにすることもできます。

  • sort (または 'rows' オプションの sortrows)

  • ne

オブジェクト クラスのメソッドは、相互に一貫していなければなりません。これらのオブジェクトは、同じルート クラスから導出した異種混合配列を含みます。たとえば、A はグラフィックス オブジェクトのハンドルの配列にすることができます。

'sorted' または 'stable' として指定される順序フラグは、C で値 (または行) の順序を示します。

フラグ説明

'sorted'

C の値 (または行) は、sort により返されるような並べ替えられた順序で返されます。

C = unique([5 5 3 4],'sorted')
C =

     3     4     5

'stable'

C の値 (または行) は A と同じ順序で返されます。

C = unique([5 5 3 4],'stable')
C =

     5     3     4

データ型: char | string

発生フラグ。'first' または 'last' として指定します。A で検出された繰り返しの値の最初のインデックスまたは最後のインデックスのいずれを ia に含めるかを指定します。

発生フラグ意味
'last'A に繰り返しの値 (または行) がある場合、ia は繰り返しの値の最後の発生に対するインデックスを含みます。たとえば、[C,ia,ic] = unique([9 9 9],'last','legacy')ia = 3 を返します。これは、'legacy' フラグが指定されている場合の既定の動作です。
'first'A に繰り返しの値 (または行) がある場合、ia は繰り返しの値の最初の発生に対するインデックスを含みます。たとえば、[C,ia,ic] = unique([9 9 9],'first')ia = 1 を返します。これは既定の動作です。

データ型: char | string

出力引数

すべて折りたたむ

A の一意のデータ。配列として返されます。C のクラスは入力 A のクラスと同じです。C の形状は、入力がベクトルであるか行列であるかによって異なります。

  • 'rows' フラグを指定しておらず、A が行ベクトルの場合、C は行ベクトルです。

  • 'rows' フラグを指定しておらず、A が行ベクトルでない場合、C は列ベクトルです。

  • 'rows' フラグを指定した場合、CA の一意の行を含む行列です。

A のインデックス。反復される要素の "最初の" 出現に対するインデックスの列ベクトルとして返されます。'legacy' フラグを指定した場合、ia は反復される要素の "最後の" 出現に対するインデックスを含む行ベクトルです。

これらのインデックスは通常 C = A(ia) を満たします。A が table の場合や、'rows' オプションが指定されている場合、C = A(ia,:) です。

C のインデックス。'legacy' フラグを指定しない場合、列ベクトルとして返されます。ic には、次のプロパティを満たすインデックスが含まれます。

  • A がベクトルの場合、A = C(ic) です。

  • A が行列または配列の場合、A(:) = C(ic) です。

  • A が table の場合や、'rows' オプションが指定されている場合、A = C(ic,:) です。

ヒント

  • 許容誤差を使用して一意の浮動小数点数を求めるには uniquetol を使用します。

  • 変数のサブセットに関する table または timetable の一意の行を求めるために、列の添字を使用できます。たとえば、unique(A(:,vars)) を使用できます。ここで、vars は、正の整数、正の整数のベクトル、変数名、変数名の cell 配列または logical ベクトルです。あるいは vartype を使用して、指定したタイプの変数を選択する添字を作成することもできます。

拡張機能

バージョン履歴

R2006a より前に導入