Main Content

coder.typeof

エントリポイント関数の入力の型を表す coder.Type オブジェクトを作成

説明

メモ

coder.Type オブジェクトの作成と編集は、コード生成の型エディターを使用して対話形式で行うこともできます。コード生成の型エディターを使用した入力の型の作成と編集を参照してください。

type_obj = coder.typeof(v)coder.Type から派生したオブジェクトを作成して、コード生成用に v の型を表します。coder.typeof は、入力パラメーターの型を指定する場合にのみ使用します。たとえば、関数 fiaccel-args オプションと共に使用します。MEX 関数の生成元となる MATLAB® コード内では、この関数を使用しないでください。

type_obj = coder.typeof(v,sz,variable_dims) では、sz で指定された上限サイズと、variable_dims で指定された可変次元をもつ type_obj = coder.typeof(v) の変更されたコピーが返されます。

type_obj = coder.typeof(v,'Gpu', true) はコード生成用に v を GPU 入力型として表す coder.Type から派生したオブジェクトを作成します。このオプションには有効な GPU Coder™ ライセンスが必要です。

type_obj = coder.typeof(type_obj)type_obj 自体を返します。

すべて折りたたむ

double で固定サイズのシンプルな 5x6 行列に対する型を作成します。

coder.typeof(ones(5,6))
ans = 

coder.PrimitiveType
   5×6 double

coder.typeof(0,[5 6])
ans = 

coder.PrimitiveType
   5×6 double

double で可変サイズ行列の型を作成します。

coder.typeof(ones(3,3),[],1)
ans = 

coder.PrimitiveType
   :3×:3 double
% ':' indicates variable-size dimensions

固定サイズの次元と可変サイズの次元をもつ行列の型を作成します。

coder.typeof(0,[2,3,4],[1 0 1])
ans = 

coder.PrimitiveType
   :2×3×:4 double

coder.typeof(10,[1 5],1) 
ans = 

coder.PrimitiveType
   1×:5 double
% ':' indicates variable-size dimensions

最初の次元は制限なし、2 番目の次元は固定サイズ double の行列の型を作成します。

coder.typeof(10,[inf,3]) 
ans = 

coder.PrimitiveType
   :inf×3 double
% ':' indicates variable-size dimensions

最初の次元は制限なし、2 番目の次元は上限サイズが 3 の可変サイズ double の行列の型を作成します。

coder.typeof(10,[inf,3],[0 1]) 
ans = 

coder.PrimitiveType
   :inf×:3 double

固定サイズの行列を可変サイズの行列に変換します。

coder.typeof(ones(5,5),[],1) 
 ans = 

coder.PrimitiveType
   :5×:5 double
% ':' indicates variable-size dimensions

可変サイズ フィールドをもつ構造体の型を作成します。

x.a = coder.typeof(0,[3 5],1);
x.b = magic(3);
coder.typeof(x)
ans = 

coder.StructType
   1×1 struct
      a: :3×:5 double
      b: 3×3 double
% ':' indicates variable-size dimensions

入れ子にされた構造体 (別の構造体のフィールドとなる構造体) を作成します。

S = struct('a',double(0),'b',single(0));
SuperS.x = coder.typeof(S);
SuperS.y = single(0);
coder.typeof(SuperS)  
ans = 

coder.StructType
   1×1 struct
      x: 1×1 struct
         a: 1×1 double
         b: 1×1 single
      y: 1×1 single

構造体の可変サイズ配列をフィールドとして含む構造体を作成します。

S = struct('a',double(0),'b',single(0));
SuperS.x = coder.typeof(S,[1 inf],[0 1]);
SuperS.y = single(0);
coder.typeof(SuperS)
ans = 

coder.StructType
   1×1 struct
      x: 1×:inf struct
         a: 1×1 double
         b: 1×1 single
      y: 1×1 single
% ':' indicates variable-size dimensions

可変サイズ フィールドをもつ同種 cell 配列の型を作成します。

a = coder.typeof(0,[3 5],1);
b = magic(3);
coder.typeof({a b})
ans = 

coder.CellType
   1×2 homogeneous cell 
      base: :3×:5 double
% ':' indicates variable-size dimensions

異種混合 cell 配列の型を作成します。

a = coder.typeof('a');
b = coder.typeof(1);
coder.typeof({a b})
ans = 

coder.CellType
   1×2 heterogeneous cell 
      f1: 1×1 char
      f2: 1×1 double

クラスが同じでサイズが異なる cell 配列から、可変サイズの同種 cell 配列型を作成します。

1. サイズが異なる 2 つの文字ベクトルが含まれる cell 配列の型を作成します。cell 配列型は異種混合になります。

coder.typeof({'aa','bbb'})
ans = 

coder.CellType
   1×2 heterogeneous cell 
      f1: 1×2 char
      f2: 1×3 char

2. 同じ cell 配列入力を使用して型を作成します。今度は、可変サイズの次元をもつ cell 配列型を指定します。cell 配列型は同種になります。

coder.typeof({'aa','bbb'},[1,10],[0,1])
ans = 

coder.CellType
   1×:10 locked homogeneous cell 
      base: 1×:3 char
% ':' indicates variable-size dimensions

固定サイズの配列を制限付きの可変サイズ配列に変更します。

値クラス オブジェクトの型を作成します。

1. 次の値クラスを作成します。

classdef mySquare
    properties
        side;
    end
    methods
        function obj = mySquare(val)
            if nargin > 0
                obj.side = val;
            end
        end
        function a = calcarea(obj)
            a = obj.side * obj.side;
        end
    end
end

2. mySquare のオブジェクトを作成します。

sq_obj = coder.typeof(mySquare(4))
sq_obj = 

coder.ClassType
   1×1 mySquare   
      side: 1×1 double

3. sq_obj と同じプロパティをもつオブジェクトの型を作成します。

t = coder.typeof(sq_obj)
t = 

coder.ClassType
   1×1 mySquare   
      side: 1×1 double

あるいは、クラス定義から型を作成することもできます。

t = coder.typeof(mySquare(4))
t = 

coder.ClassType
   1×1 mySquare   
      side: 1×1 double

string スカラーを定義します。次に例を示します。

s = "mystring";

s から型を作成します。

t = coder.typeof(s);

型オブジェクトの StringLength プロパティで string の長さの上限を割り当て、VariableStringLengthtrue に設定します。型オブジェクト t が上限 10 の可変サイズであると指定します。

t.StringLength = 10;
t.VariableStringLength = true;

t が可変サイズで上限がないことを指定するには、次のようにします。

t.StringLength = Inf;
これにより、VariableStringLength プロパティが自動的に true に設定されます。

-args オプションを使用して、型を codegen に渡します。

codegen myFunction -args {t}

入力引数

すべて折りたたむ

v は MATLAB の数値、logical 値、char、列挙、固定小数点配列にすることができます。v も前述の型を含む cell 配列、構造体、値クラスにすることができます。

v が cell 配列で、クラスが同じでサイズが異なる要素がある場合に可変サイズの次元を指定すると、coder.typeof は同種 cell 配列型を作成します。要素に異なるクラスがある場合、coder.typeof でエラーが報告されます。

例: coder.typeof(ones(5,6));

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

型オブジェクトの各次元を指定するサイズ ベクトル。

sz で次元に inf を指定する場合は、次元のサイズは無限で、次元は可変サイズです。sz[] の場合は、v の上限サイズは変化しません。

サイズが指定されない場合、szv の既定の次元を使用します。

例: coder.typeof(0,[5,6]);

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

各次元のサイズが可変 (true) か、固定 (false) かを指定する logical ベクトル。cell 配列の要素に異なるクラスがある場合、可変サイズの次元は指定できません。

variable_dims 入力パラメーターを指定しないと、この型の制限付き次元は固定になります。

スカラー variable_dims はすべての次元に適用されます。ただし、variable_dims1 の場合、大きさが 1 の次元のサイズは固定されたままになります。

例: coder.typeof(0,[2,3,4],[1 0 1]);

データ型: logical

コード生成のための v の型を表す coder.Type オブジェクト。

例: type_obj = coder.typeof(ones(5,6));

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

出力引数

すべて折りたたむ

コード生成のための v の型を表す coder.Type オブジェクト。

例: type_obj = coder.typeof(ones(5,6));

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

制限

  • スパース行列の場合、coder.typeof は可変サイズの次元の上限を下げます。

  • GPU 配列の表現では、制限付きの数値と logical の基本データ型のみがサポートされます。スカラーの GPU 配列、構造体、cell 配列、クラス、列挙型、文字、半精度データ型、および固定小数点データ型はサポートされません。

  • coder.typeof を使用して GPU 配列を表す場合、GPU コード構成オブジェクトのメモリ割り当て (malloc) モード プロパティを 'discrete' に設定しなければなりません。

ヒント

  • 引数 variable_dims で大きさが 1 の次元が可変サイズであることを明示的に指定していない限り、coder.typeof は大きさが 1 の次元のサイズを固定します。

    たとえば、以下のコードでは 1 行 :10 列の double を指定します。最初の次元 (大きさが 1 の次元) は固定サイズです。2 番目の次元は可変サイズです。

    t = coder.typeof(5,[1 10],1)
    一方、以下のコードでは :1 行 :10 列の double を指定します。どちらの次元も可変サイズになります。
    t = coder.typeof(5,[1 10],[1 1])

    メモ

    MATLAB Function ブロックでは、入力信号または出力信号の大きさが 1 の次元は可変サイズにできません。

  • 関数 type を使用して入力変数の型を既に指定している場合は、サイズも指定する場合を除き coder.typeof を使用しないでください。たとえば、coder.typeof(single(0)) ではなく、構文 single(0) を使用します。

  • cell 配列型の場合、coder.typeof は cell 配列型が同種または異種混合のどちらであるかを判定します。

    cell 配列要素のクラスとサイズが同じ場合、coder.typeof は同種 cell 配列型を返します。

    要素のクラスが異なる場合、coder.typeof は異種混合 cell 配列型を返します。

    一部の cell 配列では、同種であるか異種混合であるかの分類はあいまいです。たとえば、{1 [2 3]} の型は、最初の要素が double で 2 番目の要素が 1 行 2 列の double の、1 行 2 列の異種混合型になります。また、この型を 1 行 3 列の同種型にして、その要素のクラスを double で、サイズを 1 行 :2 列にすることもできます。このようなあいまいなケースでは、coder.typeof はヒューリスティックな方法を使用して型を同種または異種混合として分類します。異なる分類が必要な場合は、coder.CellType makeHomogeneous または makeHeterogeneous メソッドを使用して必要な分類の型を作成します。makeHomogeneous メソッドは型の同種コピーを作成します。makeHeterogeneous メソッドは型の異種混合コピーを作成します。

    makeHomogeneous メソッドと makeHeterogeneous メソッドは分類を異種混合および同種として永続的に割り当てます。これらのいずれかの方法を後で使用して分類が異なるコピーを作成することはできません。

  • GPU 配列型を使用したコード生成で、エントリポイント関数へのいずれかの入力が GPU 配列型の場合、それらが GPU コード生成でサポートされていれば、出力変数がすべて GPU 配列型になります。たとえば、エントリポイント関数が struct を返す場合、struct はサポートされていないため、生成コードは CPU 出力を返します。一方、サポートされている行列型が返される場合、生成コードは GPU 出力を返します。

バージョン履歴

R2011a で導入