Main Content

コード生成のためのデータの定義に関する考慮事項

効率的なスタンドアロン コードを生成するには、以下のデータ型とクラスを、MATLAB® でコードを実行するときとは異なるかたちで定義しなければなりません。

データ型の考慮事項詳細
配列

要素の最大数が制限されます。

コード生成における配列サイズの制限
数値型

数値型の変数には、演算で使用したり出力として返したりする前に、値を代入します。

C/C++ コード生成のための変数定義のベスト プラクティス (MATLAB Coder)
複素数
  • 変数の実数/複素数は、最初に使用する前の代入時に設定します。

  • 複素数または複素数変数を含む式は、結果の虚数部が 0 であっても複素数の結果に評価されます。

複素数データのコード生成
文字と string
  • 文字の精度は 8 ビットに制限されます。

  • コード生成では、string スカラーはグローバル変数、中かっこによるインデックス付け、欠損値、または関数 coder.varsize を使用したサイズ変更をサポートしません。

可変サイズ データ

変数に最初に固定サイズを代入した後でその変数を拡張しようとすると、コンパイル エラーが発生する可能性があります。

構造体
  • 構造体には、各制御パスにおいて同じ順序でフィールドを割り当てます。

  • 構造体配列要素内の対応するフィールドには、同じサイズ、型、および実数/複素数を割り当てます。

cell 配列
  • cell 配列を関数に渡したり関数から返したりする前に、cell 配列のすべての要素を代入します。

  • 可変サイズの cell 配列の要素はすべて同じサイズ、型、および実数/複素数をもたなければなりません。

table
  • 入力配列から table を作成する場合、名前と値の引数 'VariableNames' を使用して変数名を指定しなければなりません。

  • 関数 table と名前と値の引数 'Size' を使用して table を事前に割り当てる場合、データ型のサポートには制限があります。

  • 変数を指定する table インデックスは、コンパイル時の定数でなければなりません。

  • 代入による table のサイズ変更はできません。

  • 作成した後に table の VariableNamesRowNamesDimensionNames または UserData プロパティを変更することはできません。

クラスに適用される制限は table にも適用されます。

categorical 配列

categorical 配列では、以下の入力や操作はサポートされません。

  • MATLAB オブジェクトの配列

  • スパース行列

  • カテゴリ名の重複

  • 代入による成長

  • カテゴリの追加

  • 要素の削除

クラスに適用される制限は categorical 配列にも適用されます。

datetime 配列

datetime 配列では、以下の入力や操作はサポートされません。

  • テキスト入力

  • 名前と値の引数 'Format'

  • 名前と値の引数 'TimeZone' と 'TimeZone' プロパティ

  • 時間成分プロパティの設定

  • 代入による成長

  • 要素の削除

クラスに適用される制限は datetime 配列にも適用されます。

duration 配列

duration 配列では、以下の入力や操作はサポートされません。

  • テキスト入力

  • 代入による成長

  • 要素の削除

  • 関数 charcellstr または string を使用した duration 値のテキストへの変換

クラスに適用される制限は duration 配列にも適用されます。

timetable

  • 入力配列から timetable を作成する場合、名前と値の引数 'VariableNames' を使用して変数名を指定しなければなりません。

  • 関数 timetable と名前と値の引数 'Size' を使用して table を事前に割り当てる場合、データ型のサポートには制限があります。

  • 変数を指定する timetable インデックスは、コンパイル時の定数でなければなりません。

  • 代入による timetable のサイズ変更はできません。

  • 作成した後に timetable の VariableNames、DimensionNames または UserData プロパティを変更することはできません。

  • 規則的な timetable を作成し、不規則な行時間を指定しようとすると、エラーが発生します。

  • 不規則な timetable を作成する場合、サンプル レートまたはタイム ステップを設定しても不規則なままになります。

クラスに適用される制限は timetable にも適用されます。

列挙型データ

整数ベースの列挙型のみがサポートされます。

列挙型
MATLAB のクラス

  • コードを生成する前に、入力値のすべての範囲に対して MEX 関数を実行してクラス プロパティの検証をテストすることをお勧めします。

  • プロパティに明示的な初期値が存在しない場合、コード ジェネレーターは、コンストラクターの先頭で初期値が未定義であると認識します。コード ジェネレーターは、既定設定で空の行列を代入しません。

  • 関数 coder.varsize はクラス プロパティではサポートされていません。

  • プロパティの初期値がオブジェクトの場合、プロパティは定数でなければなりません。プロパティを定数にするには、プロパティ ブロックで Constant 属性を宣言します。

関数ハンドル
  • 同じ変数に異なる関数ハンドルを代入すると、コンパイル時にエラーが発生する場合があります。

  • エントリポイント関数または外部関数に対して関数ハンドルを受け渡しすることはできません。

  • 関数ハンドルは MATLAB Function ブロックのデバッガーから表示できません。

関数ハンドル
深層学習配列

dlarrays では、以下の入力や操作はサポートされません。

  • データ形式引数はコンパイル時の定数でなければなりません。

  • dlarray 変数は、エントリポイント関数内で定義します。

  • dlarray への入力は固定サイズでなければなりません。

  • コード生成では、上限サイズと可変次元を指定して関数 coder.typeof を使用した dlarray 型オブジェクトの作成をサポートしていません。

上記の表の情報は、各データ型の考慮事項を網羅するものではありません。詳細列のトピックを参照してください。

関連するトピック