主要内容

このペ,ジの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。

一般的なコド生成のワクフロ

機械学習モデルのオブジェクト関数ではない统计和机器学习工具箱™の関数に対する一般的なコード生成のワークフローは,MATLAB®编码器™で説明されているワ,クフロ,と同じです。詳細にいては,MATLAB编码器入門(MATLAB编码器)を参照してください。機械学習モデルのオブジェクト関数のコ,ド生成方法を学ぶには,コ,ド生成の紹介を参照してください。

この例では,次のフローチャートで要約されている一般的なコード生成のワークフローについて簡単に説明します。

エントリポ@ @ント関数の定義

“エントリポ电子邮箱ント”関数は,コ,ド生成用に定義する関数で,“最上位”関数または"プラ电子邮箱マリ"関数とも呼ばれます。codegen(MATLAB编码器)を使用して最上位レベルの関数を呼び出すことはできないので,コード生成に対応する関数を呼び出すエントリポイント関数を定義し,codegenを使用してエントリポc / c++コドを生成しなければなりません。エントリポント関数内のすべての関数がコド生成をサポトしなければなりません。

MATLABのアルゴリズムについてのコードを生成しようとしていることを指示するため,コンパイラ命令% # codegen(またはプラグマ)をエントリポ▪▪▪ント関数のシグネチャの後に追加します。この命令を追加すると,コード生成時にエラーになる違反の診断と修正をMATLAB代码分析器が支援します。コドアナラザによるコドのチェック(MATLAB编码器)を参照してください。

たとえば,位差を使用してデ,タセットの四分位数間範囲を推定するコ,ドを生成するには,次の関数を定義します。

函数r = iqrCodeGen(x)% # codegen估计四分位范围% iqrCodeGen返回数据x的四分位范围,%单精度或双精度矢量。R = iqr(x);结束
入力引数として变长度输入宗量を指定することにより,オプションの入力引数に対応できます。詳細は,可変長引数リストのコ,ド生成 (MATLAB编码器)コド生成用の可変サズ引数の指定を参照してください。

コ,ドの生成

コンパ@ @ラの設定

C/ c++コドを生成するには,正しく設定されたコンパラにアクセスできなければなりません。MATLAB编码器は,サポトされているンストル済みコンパラを探して使用します。既定のcコンパaaplラを表示および変更するには,次のように入力します。

墨西哥人设置
詳細は,既定のコンパ@ @ラの変更を参照してください。

codegenの使用によるコ,ドの生成

コンパ电子邮箱ラを設定した後で,codegen(MATLAB编码器)またはMATLAB编码器アプリを使用してエントリポ▪▪ント関数のコ▪▪ドを生成します。MATLAB编码器アプリを使用してコドを生成する方法にいては,MATLAB编码器アプリを使用したMEX関数の生成(MATLAB编码器)を参照してください。

コマンドランでコドを生成するには,codegen(MATLAB编码器)を使用します。Cおよびc++は静的な型の言語なので,エントリポイント関数内のすべての変数のプロパティをコンパイル時に決定しなければなりません。codegenを呼び出すときにarg游戏オプションを使用して,エントリポ▪▪ント関数のすべての入力に▪▪いてデ▪タ型とサ▪▪ズを指定します。

  • データ型と正確な入力配列のサイズを指定するため,特定のデータ型および配列サイズをもつ一連の値を表すMATLAB式を渡します。たとえば,iqrCodeGen.mから生成されたコードは100個の要素がある倍精度数値列ベクトルを受け入れなければならないことを指定するには,次のように入力します。

    testX = randn(100,1);codegeniqrCodeGenarg游戏{testX}报告

    报告フラグは,コ,ド生成レポ,トを生成します。コ,ド生成レポ,ト(MATLAB编码器)を参照してください。

  • 1 .以上の次元を任意の長さにすることができるよう指定するには,次のようにarg游戏オプションでcoder.typeof(MATLAB编码器)を使用します。

    args {coder.typeof (example_valuesize_vectorvariable_dims)}
    example_valuesize_vectorvariable_dimsの値は,生成されるコ,ドが受け入れることができる入力配列のプロパティを指定します。

    • 入力配列は,example_valueの例の値と同じデ,タ型です。

    • 対応するvariable_dimsの値がである場合,size_vectorは入力配列の配列サ@ @ズです。

    • 対応するvariable_dimsの値が真正的である場合,size_vectorは配列サ@ @ズの上限です。

    • variable_dimsは,配列の各次元が可変サ▪▪ズと固定サ▪▪ズのど▪▪らであるかを指定します。値真正的(逻辑1)は対応する次元が可変サesc escズであることを意味します。値(逻辑0)は対応する次元が固定サaapl .ズであることを意味します。

    可変サ@ @ズの入力の指定は,コンパ@ @ル時に観測値の個数が不明であるデ@ @タの場合に便利です。たとえば,iqrCodeGen.mから生成されたコードが任意の長さの倍精度数値列ベクトルを受け入れることができるよう指定するには,次のように入力します。

    testX = code .typeof(0,[Inf,1],[1,0]);codegeniqrCodeGenarg游戏{testX}报告

    Matlabの既定の数値デ,タ型はなので,example_value0という値はデ,タ型がであることを意味します。size_vector(正,1)という値とvariable_dims(1,0)という値は1番目の次元のサイズが可変で制限がなく,2番目の次元のサイズが1に固定されることを意味します。

    メモ

    可変サ▪▪ズ入力の指定はパフォ▪▪マンスに影響する可能性があります。詳細にいては,可変サ@ @ズの配列に対するメモリ割り当ての制御(MATLAB编码器)を参照してください。

  • サポ,トされる名前と値のペアの引数などの文字配列を指定するには,编码器。常数(MATLAB编码器)を使用して文字配列を定数として指定します。たとえば,“名字”iqrCodeGen.mの有効な名前と値のペアの引数であり,対応する値价值が数値であるとします。この場合,次のように入力します。

    codegeniqrCodeGenarg游戏{testX, coder.Constant(“名字”),值}报告

詳細にいては,コマンドラ@ @ンでの@ @ c @ @コ@ @ドの生成(MATLAB编码器)およびエントリポ@ @ント関数の入力のプロパティの指定(MATLAB编码器)を参照してください。

ビルドタ@ @プ

MATLAB编码器は,以下のタ@ # @プに@ # @いてコ,ドを生成できます。

  • Mex (matlab実行可能ファaapl . exeル)関数

  • スタンドアロンc / c++コド

  • c / c++コド

  • c / c++コド

  • c / c++コド

codegen(MATLAB编码器)配置オプションを使用して,ビルドタ。コド生成オプションの設定の詳細にいては,ビルド設定の構成(MATLAB编码器)を参照してください。

既定では,codegenはmex関数を生成します。Mex関数は,matlabから実行できるc / c++プログラムです。墨西哥人関数を使用すると,MATLABのアルゴリズムを高速化し,生成されたコードの機能と実行時の問題をテストすることができます。詳細は,Matlabアルゴリズムの高速化(MATLAB编码器)Matlabでmex関数をテストする理由(MATLAB编码器)を参照してください。

コ,ド生成レポ,ト

报告フラグを使用して,コ,ド生成レポ,トを作成できます。このレポトは,コド生成の問題のデバッグと,生成されたc / c++コドの確認に役立ます。詳細にいては,コ,ド生成レポ,ト(MATLAB编码器)を参照してください。

生成されたコ,ドの確認

墨西哥人関数をテストして,生成されたコードが元のMATLABコードと同じ機能を提供するかどうかを確認します。このテストを実行するため,元のMATLABコードの実行に使用したものと同じ入力を使用して墨西哥人関数を実行してから,結果を比較します。スタンドアロンコードを生成する前にMATLABで墨西哥人関数を実行すると,実行時エラーを検出して修正することもできます。生成されたスタンドアロンコ,ドでは,このようなエラ,の診断がはるかに困難になります。詳細は,Matlabでmex関数をテストする理由(MATLAB编码器)を参照してください。

デ,タを渡して,位差iqrCodeGenおよびiqrCodeGen_mexが同じ四分位数間範囲を返すかどうかを確認します。

testX = randn(100,1);r = iqr(testX);r_entrypoint = iqrCodeGen(testX);r_mex = iqrCodeGen_mex(testX);

isequalを使用して出力を比較します。

isequal (r, r_entrypoint, r_mex)

すべての入力が等しい場合,isequalは逻辑1 (true)を返します。

テストファ@ @ルとcoder.runTest(MATLAB编码器)を使用してmex関数を確認することもできます。詳細にいては,Matlabコ,ドから生成されるコ,ドのテスト(MATLAB编码器)を参照してください。

参考

(MATLAB编码器)

関連するトピック