メインコンテンツ

unique

説明

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

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

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

C = unique(A,setOrder) は、A の一意の値を並べ替えられた順序で返すか安定した順序で返すかを指定します。

C = unique(___,occurrence) は、前述の構文のいずれかについて、繰り返しの値の最初のインデックスを返すか最後のインデックスを返すかを指定します。

C = unique(___,"rows") は、A の各行を単一のエンティティとして扱い、A の一意の行を並べ替えられた順序で返します。"rows" オプションは、入力データが文字ベクトルの cell 配列の場合はサポートされません。

C = unique(___,"legacy") は、R2012b 以前のリリースの unique 関数の動作を維持します。"legacy" オプションを TreatMissingAsDistinct または setOrderoccurrence の両方の引数と一緒に指定することはサポートされていません。"legacy" オプションは categorical 配列、datetime 配列、duration 配列、calendarDuration 配列、table、timetable をサポートしません。

C = unique(___,TreatMissingAsDistinct=tf) は、欠損値を個別のものとして扱うかどうかを指定します。 (R2026a 以降)

[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,:) です。

すべて折りたたむ

繰り返しの値を含むベクトルを作成します。その後、ベクトルの一意の値を検出します。

A = [9 2 9 5];
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 の値が一意であるテーブルの行を検出します。一意の値を格納する table 変数が 1 つだけであれば、unique で返されるインデックスを使用してそれらの行を table から抽出できます。

[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 の一意の値を検出し、C = A(ia) および A = C(ic) であるインデックス ベクトル iaic を返します。

A = [9 2 9 5];
[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 のランダムな整数から成るベクトルを作成します。ベクトル内の一意の要素を検出し、インデックス ベクトル iaic を返します。

a = randi([1 5],200,1);
[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

繰り返しの値を含むベクトルを作成します。ベクトル内の一意の値を検出し、その集合の順序を "stable" として指定することで、ベクトル内の出現順序と同じ順序で返します。

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

     9     2     5

欠損値を含むベクトルを作成します。ベクトル内の一意の値を検出します。unique は、欠損値のインスタンスのそれぞれを異なる値として扱います。

A = [5 8 NaN NaN];
C = unique(A)
C = 1×4

     5     8   NaN   NaN

あるいは、欠損値のインスタンスのそれぞれを重複値として扱います (R2026a 以降)

C2 = unique(A,TreatMissingAsDistinct=false)
C2 = 1×3

     5     8   NaN

ベクトル 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

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

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

    3.1416
    3.1416
    6.2832
    9.4248
   12.5664
   15.7080
   18.8496
   18.8496

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

Ctol = uniquetol(A)
Ctol = 6×1

    3.1416
    6.2832
    9.4248
   12.5664
   15.7080
   18.8496

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

A = ["one" "two" "twenty-two" "One" "two"];
C = unique(A)
C = 1×4 string
    "One"    "one"    "twenty-two"    "two"

1 つの string の末尾に空白文字がある string 配列を作成します。配列内の一意の string を検出します。unique は、末尾に空白文字がある string を個別の string として扱います。

A = ["dog" "cat" "horse" "horse" "dog "];
C = unique(A)
C = 1×4 string
    "cat"    "dog"    "dog "    "horse"

入力引数

すべて折りたたむ

入力データ。配列、table、または timetable として指定します。

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

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

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

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

  • sort ("rows" オプションを指定する場合は sortrows)

  • ne (等しくない)

メソッドの動作や結果に競合があってはなりません。sort または sortrows は安定した並べ替えアルゴリズムを使用する必要があります。たとえば、グラフィックス オブジェクトの配列など、共通のルート クラスから派生する異種混合配列として A を指定できます。

C で返される値の順序。次の表の値のいずれかとして指定します。

説明

"sorted"

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

"stable"

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

例: C = unique([5 5 3 4],"sorted") は、値を並べ替えられた順序で C = [3 4 5] として返します。

例: C = unique([5 5 3 4],"stable") は、値を元の順序を保持して C = [5 3 4] として返します。

ia で返されるインデックスの出現位置。次の表の値のいずれかとして指定します。

説明
"first"A に繰り返しの値 (または行) がある場合、繰り返しの値の最初の出現位置に対するインデックスが ia に格納されます。
"last"A に繰り返しの値 (または行) がある場合、繰り返しの値の最後の出現位置に対するインデックスが ia に格納されます。

例: [C,ia,ic] = unique([9 9 9],"first") は、繰り返し値の最初の出現位置のインデックスを ia = 1 として返します。

例: [C,ia,ic] = unique([9 9 9],"last") は、繰り返し値の最後の出現位置のインデックスを ia = 3 として返します。

R2026a 以降

欠損値を個別のものとして扱うオプション。次の値のいずれかとして指定します。

  • true または 1 — 欠損値を個別のものとして扱います。入力データにおける欠損値のインスタンスのそれぞれが C に含まれます。

  • false または 0 — 繰り返し出現する欠損値のインスタンスのそれぞれを重複として扱います。最大で 1 つの欠損値が C に含まれます。入力データが table の場合や "rows" オプションを指定している場合は、欠損値がある複数の行が C に格納されることがあります。同じ列に欠損値があり、対応する非欠損値が他の列にある場合、その行は重複となります。

例: C = unique(A,TreatMissingAsDistinct=false) は、欠損値のインスタンスのそれぞれを重複として扱います。

データ型: logical

出力引数

すべて折りたたむ

A の一意のデータ。配列、table、または timetable として返されます。C のクラスは入力 A のクラスと同じです。C の形状は A の形状に依存します。

  • "rows" オプションを指定せず、A が行ベクトルの場合、C は行ベクトルです。

  • "rows" オプションを指定せず、A が列ベクトルの場合、C は列ベクトルです。

  • "rows" オプションを指定する場合、CA の一意の行を含む行列です。

  • A が table または timetable の場合、CA と同じ数の変数をもつ table または timetable です。

A のインデックス。繰り返し要素の最初の出現位置に対するインデックスの列ベクトルとして返されます。occurrence"last" として指定すると、繰り返し要素の最後の出現位置に対するインデックスが ia に格納されます。

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

C のインデックス。列ベクトルとして返されます。

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

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

  • A が table または timetable の場合や "rows" オプションを指定している場合、A = C(ic,:) です。

ヒント

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

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

拡張機能

すべて展開する

バージョン履歴

R2006a より前に導入

すべて展開する