メインコンテンツ

combinations

配列のすべての要素の組み合わせの生成

R2023a 以降

    説明

    T = combinations(A1,...,An) は、入力配列 A1,...,An のすべての要素の組み合わせを生成します。出力 table T の各行は組み合わせです。これらの組み合わせは、n 個の要素セットのデカルト積と同じです (n 個のセットは入力配列 A1,...,An で表される)。

    • T の行数は各入力配列の要素数の積です。行数は組み合わせの数と同じです。

    • T 内の変数の数は入力配列の数と同じです。

    • T 内の各変数のデータ型は、対応する入力配列のデータ型と同じです。

    すべて折りたたむ

    2 つのベクトルのすべての要素の組み合わせを生成します。出力 table T の各行は、最初のベクトルからの最初の要素と 2 番目のベクトルからの 2 番目の要素の組み合わせです。変数 Var1 には最初のベクトルからの要素が含まれ、変数 Var2 には 2 番目のベクトルからの要素が含まれます。

    T = combinations([1 8 6],[9 3 2])
    T=9×2 table
        Var1    Var2
        ____    ____
    
         1       9  
         1       3  
         1       2  
         8       9  
         8       3  
         8       2  
         6       9  
         6       3  
         6       2  
    
    

    2 つの配列のすべての要素の組み合わせを生成します。関数 combinations は、要素の組み合わせを生成する前に各入力を列ベクトルに変更します。

    T = combinations([7 3;2 6],[9 1 4])
    T=12×2 table
        Var1    Var2
        ____    ____
    
         7       9  
         7       1  
         7       4  
         2       9  
         2       1  
         2       4  
         3       9  
         3       1  
         3       4  
         6       9  
         6       1  
         6       4  
    
    

    3 つの string 配列のすべての要素の組み合わせを生成します。出力 table の変数の名前は string 配列の名前に基づきます。

    ID = ["A" "B" "C"];
    color = ["red" "blue" "green"];
    sz = ["small" "large"];
    
    T = combinations(ID,color,sz)
    T=18×3 table
        ID      color       sz   
        ___    _______    _______
    
        "A"    "red"      "small"
        "A"    "red"      "large"
        "A"    "blue"     "small"
        "A"    "blue"     "large"
        "A"    "green"    "small"
        "A"    "green"    "large"
        "B"    "red"      "small"
        "B"    "red"      "large"
        "B"    "blue"     "small"
        "B"    "blue"     "large"
        "B"    "green"    "small"
        "B"    "green"    "large"
        "C"    "red"      "small"
        "C"    "red"      "large"
        "C"    "blue"     "small"
        "C"    "blue"     "large"
          ⋮
    
    

    各組み合わせ全体で要素を組み合わせてデータ ラベルを作成します。中かっこ {} を使用して table T の内容を抽出し、join を使用して行全体で要素を組み合わせます。

    labels = join(T{:,:},"_")
    labels = 18×1 string
        "A_red_small"
        "A_red_large"
        "A_blue_small"
        "A_blue_large"
        "A_green_small"
        "A_green_large"
        "B_red_small"
        "B_red_large"
        "B_blue_small"
        "B_blue_large"
        "B_green_small"
        "B_green_large"
        "C_red_small"
        "C_red_large"
        "C_blue_small"
        "C_blue_large"
        "C_green_small"
        "C_green_large"
    
    

    さまざまなサイズとデータ型の入力のすべての要素の組み合わせを生成します。

    出力 table T の行数は、numel(A1)numel(A2)、および numel(A3) の積と等しくなります。出力 table T 内の各変数のデータ型は、対応する入力のデータ型と同じです。

    A1 = [0 1; 2 3];
    A2 = ["a" "b" "c"];
    A3 = categorical(["x" "y"]);
    T = combinations(A1,A2,A3)
    T=24×3 table
        A1    A2     A3
        __    ___    __
    
        0     "a"    x 
        0     "a"    y 
        0     "b"    x 
        0     "b"    y 
        0     "c"    x 
        0     "c"    y 
        2     "a"    x 
        2     "a"    y 
        2     "b"    x 
        2     "b"    y 
        2     "c"    x 
        2     "c"    y 
        1     "a"    x 
        1     "a"    y 
        1     "b"    x 
        1     "b"    y 
          ⋮
    
    

    複数のパラメーターの要素を組み合わせた table を生成し、rowfun関数を使用して各行に関数を適用できます。それぞれの組み合わせの結果を効率的に計算して整理するには、combinations 関数と rowfun 関数を一緒に使用します。

    Percentage パラメーターと Method パラメーターの可能なすべての組み合わせを含む table を生成します。

    Percentage = [25; 75];
    Method = ["midpoint"; "inclusive"; "exclusive"];
    T = combinations(Percentage,Method)
    T=6×2 table
        Percentage      Method   
        __________    ___________
    
            25        "midpoint" 
            25        "inclusive"
            25        "exclusive"
            75        "midpoint" 
            75        "inclusive"
            75        "exclusive"
    
    

    rowfun 関数を使用して table の各行に prctile 関数を適用します。rowfun は、パラメーターの各組み合わせに対して結果として得られる百分位数を含む table を返します。

    A = rand(13,1);
    T2 = rowfun(@(p,m) prctile(A,p,Method=m),T, ...
    OutputVariableNames="Percentile");

    生成された各出力がどのパラメーター値のものであるかがわかるように、結果をパラメーターの組み合わせの table に追加します。

    T3 = [T T2]
    T3=6×3 table
        Percentage      Method       Percentile
        __________    ___________    __________
    
            25        "midpoint"      0.24828  
            25        "inclusive"      0.2785  
            25        "exclusive"     0.21806  
            75        "midpoint"      0.95725  
            75        "inclusive"     0.95717  
            75        "exclusive"     0.95734  
    
    

    入力引数

    すべて折りたたむ

    入力配列。スカラー、ベクトル、行列または多次元配列のコンマ区切りリストとして指定します。入力配列ごとにサイズやデータ型が異なっていてもかまいません。

    データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical | char | string | struct | datetime | duration | calendarDuration | categorical | cell
    複素数のサポート: あり

    ヒント

    • categorical 配列

      入力配列が categorical 配列の場合、カテゴリが入力のすべての組み合わせである別の categorical 配列を生成できます。combinations 関数は table 内のすべての組み合わせを返すため、代わりに .* 演算子の使用を検討してください。

      たとえば、2 つの categorical 配列を作成し、.* 演算子を呼び出します。

      colors = categorical(["blue" "red" "green" "black"]);
      signs = categorical(["+" "-" "-" "+"]);
      C = colors .* signs
      
      C = 
      
        1×4 categorical array
      
           blue +      red -      green -      black + 
      

      結果は、カテゴリが入力のカテゴリのすべての組み合わせである categorical 配列になります。categories 関数を使用してカテゴリを一覧表示します。

      categories(C)
      
      ans =
      
        8×1 cell array
      
          {'black +'}
          {'black -'}
          {'blue +' }
          {'blue -' }
          {'green +'}
          {'green -'}
          {'red +'  }
          {'red -'  }
      

    バージョン履歴

    R2023a で導入