ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

coder.typeof

パッケージ: coder

MATLAB 値を正準型に変換

構文

t = coder.typeof(v)
t = coder.typeof(v, sz, variable_dims)
t = coder.typeof(t)

説明

t = coder.typeof(v) では、v を含む最小の非定数型を表す coder.Type オブジェクトが作成されます。v は MATLAB® の数値、論理値、文字、列挙、固定小数点配列、セル配列または前述の任意の型で構成される構造体でなければなりません。coder.typeof は、入力パラメーターの型を指定する場合にのみ使用します。たとえば、関数 fiaccel-args オプションと共に使用します。MEX 関数の生成元となる MATLAB コード内では、この関数を使用しないでください。

t = coder.typeof(v, sz, variable_dims) では、sz で指定された上限サイズと、可変次元 variable_dims をもつ t = coder.typeof(v) の変更されたコピーが返されます。sz で次元に inf を指定する場合は、次元のサイズは無限で、次元は可変サイズです。sz[] の場合は、v の上限サイズは変化しません。variable_dims 入力パラメーターを指定しないと、この型の制限付き次元は固定になります。variable_dims がスカラーの場合は、制限付き次元か、1 または 0 (固定) である次元に適用されます。

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

t = coder.typeof(t) では、tcoder.Type オブジェクトであり、t 自体を返します。

入力引数

sz

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

t

coder.Type オブジェクト

v

この型で表される値のセットを記述する MATLAB 式。

v は MATLAB の数値、論理値、文字、列挙、固定小数点配列、セル配列または前述の任意の型で構成される構造体でなければなりません。

variable_dims

各次元のサイズが可変 (true) か、固定 (false) かを指定する論理ベクトル。

セル配列の要素に異なるクラスがある場合、可変サイズの次元は指定できません。

出力引数

t

coder.Type オブジェクト

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

coder.typeof(ones(5, 6))         
 % returns 5x6 double
coder.typeof(0, [5 6])           
 % also returns 5x6 double

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

coder.typeof(ones(3,3), [], 1)    
% returns :3 x :3 double
% ':' indicates variable-size dimensions

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

x.a = coder.typeof(0,[3 5],1);
x.b = magic(3);
coder.typeof(x)
% Returns 
% coder.StructType
%    1x1 struct
%      a:  :3x:5 double
%      b:  3x3  double
% ':' indicates variable-size dimensions

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

a = coder.typeof(0,[3 5],1);
b = magic(3);
coder.typeof({a b})
% Returns 
% coder.CellType
%   1x2 homogeneous cell 
%      base: :3x:5 double
% ':' indicates variable-size dimensions

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

a = coder.typeof('a');
b = coder.typeof(1);
coder.typeof({a b})
% Returns 
% coder.CellType
%   1x2 heterogeneous cell 
%      f0: 1x1 char
%      f1: 1x1 double

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

  1. サイズが異なる 2 つの文字列をもつセル配列の型を作成します。セル配列型は異種混合になります。

    coder.typeof({'aa', 'bbb'})
    % Returns
    % coder.CellType
    %   1x2 heterogeneous cell 
    %      f0: 1x2 char
    %      f1: 1x3 char
    
  2. 同じセル配列入力を使用して型を作成します。今度は、可変サイズの次元をもつセル配列型を指定します。セル配列型は同種になります。

    coder.typeof({'aa','bbb'},[1,10],[0,1])
    % Returns
    % coder.CellType
    %   1x:10 homogeneous cell 
    %      base: 1x:3 char
    

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

coder.typeof(0, [2,3,4], [1 0 1]);
% Returns :2x3x:4 double 
% ':' indicates variable-size dimensions
coder.typeof(10, [1 5], 1) 
% returns double 1 x  :5
% ':' indicates variable-size dimensions

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

coder.typeof(10,[inf,3]) 
% returns double:inf x 3
% ':' indicates variable-size dimensions

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

coder.typeof(10, [inf,3],[0 1]) 
% returns double :inf x :3
% ':' indicates variable-size dimensions

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

 coder.typeof(ones(5,5), [], 1) 
% returns double :5x:5
% ':' indicates variable-size dimensions

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

S = struct('a',double(0),'b',single(0))
SuperS.x = coder.typeof(S)
SuperS.y = single(0)
coder.typeof(SuperS)  
% Returns 
% coder.StructType
% SuperS:  1x1 struct
%   with fields 
%      x:  1x1 struct
%         with fields
%             a: 1x1 double
%             b: 1x1 single
%      y:  1x1  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)  
% Returns 
% coder.StructType
% SuperS:  1x1 struct
%   with fields 
%      x:  1x:inf struct
%         with fields
%             a: 1x1 double
%             b: 1x1 single
%      y:  1x1  single
% ':' indicates variable-size dimensions

ヒント

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

  • セル配列型の場合、coder.typeof はセル配列型が同種または異種混合のどちらであるかを判定します。セル配列要素のクラスとサイズが同じ場合、coder.typeof は同種のセル配列型を返します。要素のクラスが異なる場合、coder.typeof は異種混合のセル配列型を返します。一部のセル配列では、同種であるか異種混合であるかの分類はあいまいです。たとえば、{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 メソッドは分類を異種混合および同種としてそれぞれ永続的に割り当てます。これらのいずれかの方法を後で使用して分類が異なるコピーを作成することはできません。

R2011a で導入

この情報は役に立ちましたか?