Main Content

cell 配列のコード生成

cell 配列を含む MATLAB® コードからコードを生成すると、コード ジェネレーターは cell 配列を "同種" または "異種混合" として分類します。この分類により、生成されたコードにおける cell 配列の表現方法が決定されます。また、コードを生成する MATLAB コード内で cell 配列を使用する方法についても決定されます。

コード生成用に cell 配列を MATLAB コードで使用するときは、特定の制限に従わなければなりません。コード生成における cell 配列の制限事項を参照してください。

同種 cell 配列と異種混合 cell 配列

同種 cell 配列には以下の特性があります。

  • cell 配列は生成されたコード内で配列として表されます。

  • すべての要素のプロパティは同じになります。cell 配列に関連付けられている型は、個別の要素のプロパティではなく、すべての要素のプロパティを指定します。

  • cell 配列は可変サイズにすることができます。

  • 実行時に値が決定するインデックスを使用して cell 配列にインデックスを付けることができます。

異種混合 cell 配列には以下の特性があります。

  • cell 配列は生成されたコードで構造体として表されます。各要素は構造体のフィールドとして表されます。

  • 要素は異なるプロパティをもつことができます。cell 配列に関連付けられている型は、各要素のプロパティを個々に指定します。

  • cell 配列を可変サイズにすることはできません。

  • 定数のインデックスまたは定数境界をもつ for ループを使用して cell 配列にインデックスを付けなければなりません。

コード ジェネレーターはヒューリスティックな方法を使用して cell 配列が同種か異種混合かの分類を判別します。要素のプロパティ (クラス、サイズ、実数/複素数) や、プログラムにおける cell 配列の使用方法などのその他の要因が考慮されます。cell 配列の使用方法に応じて、コード ジェネレーターは cell 配列をあるケースでは同種、別のケースでは異種混合として分類することができます。たとえば、cell 配列 {1 [2 3]} について考えます。コード ジェネレーターはこの cell 配列を 1 行 2 列の異種混合 cell 配列として分類できます。最初の要素は double のスカラーです。2 番目の要素は 1 行 2 列の double の配列です。ただし、実行時に値が決定されるインデックスで cell 配列にインデックスを付ける場合、コード ジェネレーターはそれを同種 cell 配列として分類します。要素は上限が 2 の double の可変サイズの配列です。

cell 配列を同種にするか異種混合にするかの制御

特定の特性をもつ cell 配列では、同種または異種混合としての分類を制御することはできません。

  • 要素に異なるクラスがある場合、cell 配列は異種混合になります。

  • cell 配列が可変サイズの場合、同種になります。

  • 実行時に値が決定されるインデックスで cell 配列にインデックスを付ける場合、cell 配列は同種になります。

その他の cell 配列では、同種または異種混合としての分類を制御できます。

エントリポイント関数の入力である cell 配列の分類を制御するには、次を行います。

エントリポイント関数の入力ではない cell 配列の分類を制御するには、次を行います。

  • cell 配列が固定サイズの場合、coder.cstructname を使用して同種 cell 配列を強制的に異種混合にすることができます。以下に例を示します。

    function y =  mycell()
    %#codegen
    c = {1 2 3};
    coder.cstructname(c, 'myname');
    y = c;
    end

  • cell 配列要素が同じクラスである場合、coder.varsize を使用して cell 配列を強制的に同種にすることができます。cell 配列を可変サイズにするかの制御を参照してください。

生成されたコードにおける異種混合 cell 配列を表す構造体型への名前付け

コード ジェネレーターは、異種混合 cell 配列を生成されたコード内の構造体として表します。生成された構造体型に名前を付けることができます。構造体のフィールドに名前を付けることはできません。

cell 配列がエントリポイント関数の入力の場合は、cell 配列入力の定義を参照してください。cell 配列がエントリポイント関数の入力でない場合は、MATLAB 関数で coder.cstructname を使用します。以下に例を示します。

function y =  mycell()
%#codegen
c = {1 'a'};
coder.cstructname(c, 'myname');
y = c;
end

レポート内の cell 配列

cell 配列が同種か異種混合かを確認するには、コード生成レポートの変数を表示します。

同種 cell 配列の場合、レポートにはすべての要素のプロパティを指定する 1 つのエントリがあります。表記法 {:} は、cell 配列のすべての要素が同じプロパティをもつことを示しています。

This image shows a homogenous cell array in a report. the notation {:} appears below the array c.

異種混合 cell 配列の場合、レポートには要素ごとに 1 つのエントリがあります。たとえば、2 つの要素をもつ異種混合 cell 配列 c では、c{1} のエントリに最初の要素のプロパティが示されます。c{2} のエントリに 2 番目の要素のプロパティが示されます。

This image shows a heterogeneous cell array in a report. {1} and {2} appear below the array c to indicate the different properties of each element.

参考

| |

関連するトピック