Main Content

コード生成における timetable の制限事項

コード生成を目的とする MATLAB® コードで timetable を作成、変更したり、timetable 関数を使用する場合、コード生成には次の節で説明する制限があります。クラスに適用される制限は timetable にも適用されます。クラスの制限の詳細については、コード生成のための MATLAB クラスの定義を参照してください。

timetable 作成の制限事項

MATLAB コードで timetable を作成する場合、コード生成には次の制限があります。

timetable 作成の入力

制限

すべての入力

  • 名前と値の引数 'DimensionNames' を使用して指定していない限り、timetable の最初の次元の名前は 'Time' です。

    最初の次元の名前は行時間のベクトルの名前でもあり、ドット表記を使用して参照できます。

  • 名前と値の引数 'SampleRate''StartTime' または 'TimeStep' がエントリポイント関数によって渡されるときに規則的な timetable を作成するには、最初に関数 coder.Constant を使用して値を定数にします。それらを定数にしない場合、行時間は不規則であると見なされます。

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

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

  • timetable 変数の名前は、有効な MATLAB 識別子である必要はありません。名前は ASCII 文字で構成されなければならず、コンマ、ダッシュ、空白文字を含めることができます。

入力配列から作成された timetable

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

事前に割り当てられた変数を使用して作成された timetable

  • 関数 timetable'Size' の名前と値の引数を使用して timetable を事前に割り当てる場合、'VariableNames' 引数を指定する必要はありません。

  • 'VariableTypes' の名前と値の引数を使用して、以下のデータ型のみを指定できます。

    • 'double'

    • 'single'

    • 'doublenan' または 'doubleNaN'

    • 'singlenan' または 'singleNaN'

    • 'int8''int16''int32'、または 'int64'

    • 'uint8''uint16''uint32'、または 'uint64'

    • 'logical'

    • 'datetime'

    • 'duration'

    • 'cellstr'

    • 'char'

timetable 変更の制限事項

MATLAB コードが timetable 内のデータ、その行時間、またはプロパティを変更する場合、コード生成には次の制限事項があります。

timetable 演算またはプロパティ

制限

VariableNamesDimensionNames、または UserData プロパティ

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

    timetable を作成するときに、'VariableNames''DimensionNames'、および 'RowTimes' の入力引数を指定して、これらの名前をもつプロパティを設定できます。

生成されたコードへの入力引数としての timetable インデックス

  • 変数を指定する timetable インデックスを生成されたコードに入力引数として渡すには、最初に関数 coder.Constant を使用して、インデックスを timetable 定数の 2 番目の次元に設定します。2 番目の次元に設定したインデックスが定数ではない場合、変数にインデックスを付けることでエラーが発生します。

  • timetable に含まれる行時間が duration 値であり、関数 timerange または withtol によって作成されたオブジェクトまたは duration 値のいずれかを使用してインデックスを付ける場合、出力は可変の行数をもつ非定数になります。

  • 規則的な timetable に含まれる行時間が duration 値であり、関数 timerange または withtol によって作成されたオブジェクトまたは duration 値のいずれかを使用してインデックスを付ける場合、出力は不規則であると見なされます。

カスタム メタデータ

  • カスタム メタデータは timetable に追加できません。関数 addprop と関数 rmprop はサポートされません。

timetable のサイズを変更する代入

  • 代入による timetable のサイズ変更はできません。たとえば、この呼び出しにより新しい行を追加することで、エラーが発生します。

    function TT = foo() %#codegen
        TT = timetable((1:3)',(1:3)',...
        'RowTimes',seconds([0,5,10]),...
        'VariableNames',{'Var1','Var2'});
        TT{4,:} = [5,5];
    end
    

    割り当てにより行または変数を削除しても、エラーが発生します。

  • 割り当て内の新しい行時間を使用して新しい行を追加することはできません。たとえば、この呼び出しは、数値インデックスではなく新しい行時間を使用して新しい行を追加するため、エラーは発生しませんが、新しい行が追加されません。

    function TT = foo() %#codegen
        TT = timetable((1:3)',(1:3)',...
        'RowTimes',seconds([0,5,10]),...
        'VariableNames',{'Var1','Var2'});
        TT{seconds(15),:} = [5,5];
    end
    

垂直方向の連結

  • timetable を垂直方向に連結する場合、同じ変数名を同じ順序でもたなければなりません。MATLAB では、変数名は同じでなければなりませんが、timetable では異なる順序にすることができます。

水平方向の連結

  • timetable を水平方向に連結する場合、それらの行時間は同じで、同じ順序でなければなりません。MATLAB では、行時間は同じでなければなりませんが、timetable では異なる順序にすることができます。

N 次元 cell 配列である timetable 変数

  • 2 つの timetable に N 次元 cell 配列の変数がある場合、これらの timetable を垂直方向に連結することはできません。

  • この演算は水平連結であるため、中かっこを使用して N 次元 cell 配列である複数の timetable 変数からデータを抽出することはできません。

timetable 関数の制限事項の使用

MATLAB コードが表に示されている関数を使用する場合、コード生成には次の制限事項があります。

関数

制限

convertvars

  • 関数ハンドルはサポートされません。

  • 2 番目および 3 番目の入力引数 (vars および dataType) は定数でなければなりません。

  • dataType'cell''cellstr'、または 'char' として指定できません。

innerjoin

  • 一般的に、入力 timetable には同じ名前をもつ非キー変数を含めることはできません。ただし、名前と値の引数 'LeftVariables''RightVariables' を指定する場合は入力 timetable のサブセットを連結できます。これらの引数については、いずれの変数名も 'LeftVariables''RightVariables' の両方に含まれることがないように指定してください。

  • 次の名前と値の引数の値は定数でなければなりません。

    • 'Keys'

    • 'LeftKeys'

    • 'RightKeys'

    • 'LeftVariables'

    • 'RightVariables'

  • 入れ子の timetable はサポートされません。

intersect

setdiff

setxor

union

  • これらの関数は、すべての場合において並べ替えられていない timetable をサポートします。'stable' オプションを指定する必要はありません。

isregular

  • coder.Constant を使用して入力引数 timeComponent を定数にします。

  • 入力引数 timeComponent はカレンダー単位にできません。指定する場合、その値は 'time' でなければなりません。

issortedrows

  • 入力引数 vars は定数でなければなりません。

  • 任意の timetable 変数に複数の列がある場合、それらの変数は固定幅でなければなりません。

join

  • 一般的に、入力 timetable には同じ名前をもつ非キー変数を含めることはできません。ただし、次の名前と値の引数を指定する場合は入力 timetable のサブセットを連結できます。

    • 'KeepOneCopy'。左の入力 timetable のみから取得する変数をリストします。

    • 'LeftVariables''RightVariables'。左の入力 timetable と右の入力 timetable の両方ではなく一方のみから取得する変数をリストします。

  • 次の名前と値の引数の値は定数でなければなりません。

    • 'Keys'

    • 'LeftKeys'

    • 'RightKeys'

    • 'LeftVariables'

    • 'RightVariables'

    • 'KeepOneCopy'

  • 入れ子の timetable はサポートされません。

movevars

  • 入力引数 vars には重複した変数名を含めることができません。

outerjoin

  • 'MergeKeys' の値が true (logical 1) の場合を除き、入力 timetable に同じ名前をもつキー変数を含めることはできません。

  • 一般的に、入力 timetable には同じ名前をもつ非キー変数を含めることはできません。ただし、名前と値の引数 'LeftVariables''RightVariables' を指定する場合は入力 timetable のサブセットを連結できます。これらの引数については、いずれの変数名も 'LeftVariables''RightVariables' の両方に含まれることがないように指定してください。

  • 次の名前と値の引数の値は定数でなければなりません。

    • 'Keys'

    • 'LeftKeys'

    • 'RightKeys'

    • 'MergeKeys'

    • 'LeftVariables'

    • 'RightVariables'

    • 'Type'

  • 入れ子の timetable はサポートされません。

retime

synchronize

  • 出力 timetable の行時間は、一定のタイム ステップをもつ行時間に同期された場合でも不規則とみなされます。

  • 'makima' 内挿法はサポートされていません。

  • 入力 timetable の VariableContinuity プロパティが定数でない場合、この関数はそれらを無視します。

  • 'weekly''monthly'、および 'quarterly' タイム ステップはサポートされていません。

    • 入力 timetable が datetime の値である行時間をもつ場合、'daily' および 'yearly' タイム ステップもサポートされません。

sortrows

  • 入力引数 vars は定数でなければなりません。

  • tblA の変数が文字ベクトルの cell 配列で、複数の列を含む場合、その変数内の値を使用して timetable を並べ替えることはできません。

splitvars

  • 名前と値の引数 'NewVariableNames' の値は定数でなければなりません。

  • 分割された変数は、可変の列数をもつことはできません。

stack

  • 2 番目の入力引数 (vars) は定数でなければなりません。

  • 名前と値の引数 'ConstantVariables''NewDataVariableName'、および 'IndexVariableName' の値は定数でなければなりません。

timerange

  • 入力引数 unitOfTime はサポートされていません。

unstack

  • 名前と値の引数 'NewDataVariableNames' を指定しなければなりません。その値は定数でなければなりません。

  • 入力引数 varsivars (データ変数および指標変数) は定数でなければなりません。

  • グループ化変数と定数変数を指定する場合、それらは定数でなければなりません。

  • 集積関数を指定する場合、定数でなければなりません。

  • 入力が規則的な行時間をもつ timetable であり、行時間を含まないグループ化変数を指定した場合、出力 timetable の行時間が不規則になる可能性があります。出力の行時間の間隔は同じに見えても、出力 timetable は行時間のベクトルを不規則と見なします。

  • 入力 timetable の変数が文字ベクトルの cell 配列である場合、unstack は、生成されたコード内で対応する出力変数内の空のセルを 1 行 0 列の文字配列で埋めます。MATLAB では、unstack はそのようなギャップを 0 行 0 列の文字配列で埋めます。

  • 入力 timetable に含まれる変数が同種 cell 配列に変換できない異種混合 cell 配列である場合、関数 unstack はコード生成をサポートしません。

    • 同種 cell 配列である変数、または同種 cell 配列に変換できる変数が入力にある場合、名前と値の引数 'AggregationFunction' を指定しなければなりません。'AggregationFunction' の既定値は 'unique' です。しかし、関数 unique では cell 配列はサポートされません。

varfun

  • 関数ハンドル入力 func は定数でなければなりません。

  • 関数ハンドルを varfun 自体への入力にすることはできますが、エントリポイント関数への入力にすることはできません。コード生成用のコード内で func を指定します。詳細については、コード生成における関数ハンドルの制限事項を参照してください。

  • すべての名前と値の引数の値は定数でなければなりません。

  • 名前と値の引数 'ErrorHandler' はコード生成でサポートされません。

  • 可変サイズの入力引数はサポートされません。

  • 'GroupingVariables' を指定した場合、出力は常に不規則な timetable です。

  • 生成されたコード内では、グループ化変数は重複する値をもつことができません。

  • 名前と値の引数 'GroupingVariables' を指定し、関数が 'InputVariables' で指定された各変数に対して異なるデータ型を返す場合、'OutputFormat' の値を 'cell' として指定することはできません。

  • グループを指定し、コンパイル時にグループの数が不明であり、その数がゼロであると判明した場合、出力内の空の倍精度変数は、生成されたコード内で 1 行 0 列のサイズをもつ可能性があります。MATLAB では、こうした変数のサイズは 0 行 0 列です。

参考

| |

関連するトピック