mxArray の操作
MAT ファイル インターフェイス ライブラリにより、MAT ファイル内の MATLAB® 配列 (mxArray
型) にアクセスできます。C/C++ アプリケーションで mxArray
を直接操作する場合、行列ライブラリの関数を使用します。
mxArray
型の操作例は、matlabroot
/extern/examples/mex
と matlabroot
/extern/examples/mx
のフォルダーにあります。以下のトピックでは、セルと構造体を扱う C コードの例を、これらの MEX の例に基づいて示します。例では、各配列要素内の mxArray
の型に基づいて cell 配列と構造体配列を読み取り、情報を表示する方法を示します。
MEX の例からアプリケーションを作成する場合、コードを書き換えてスタンドアロン アプリケーションとするためのヒントが記載されています。
MAT ファイルの例である
matdgns.c
では MAT ファイルの開き方と読み取り方を示します。例についての詳細は、MAT ファイルの読み取り (C/C++)を参照してください。MEX の例である
explore.c
には、関数mxClassID
を使用して任意の MATLAB 型を読み取る機能があります。例についての詳細は、データ型の使用を参照してください。一部の MEX の例では、
mexPrintf
など、C MEX API ライブラリlibmex
の関数を使用しています。これらの関数はmxArray
の操作時には必要ではありませんが、プログラムでこれらを呼び出すのであれば、MEX ライブラリにリンクしなければなりません。この場合、link ステートメントにlibmex.lib
を追加します。
MAT ファイルからの構造体の読み取り
matreadstructarray.c
の例は、explore.c
内の関数 analyze_structure
を基にしています。簡単にするため、この例では double
型の実数要素だけを処理します。エラー チェックや他の型の処理については、explore.c
の例を参照してください。
コードを表示するには、MATLAB エディターでファイルを開きます。
プログラムをビルドした後に、MAT ファイル testpatient.mat
でアプリケーションを実行します。
まず、patient
という構造体を作成し、保存します。
patient(1).name = 'John Doe'; patient(1).billing = 127.00; patient(1).test = [79 75 73; 180 178 177.5; 172 170 169]; patient(2).name = 'Ann Lane'; patient(2).billing = 28.50; patient(2).test = [68 70 68; 118 118 119; 172 170 169]; save testpatient.mat
billing
フィールドの合計を計算します。
!matreadstruct testpatient.mat patient billing
Total for billing: 155.50
MAT ファイルからの cell 配列の読み取り
matreadcellarray.c
の例は、explore.c
内の関数 analyze_cell
を基にしています。
コードを表示するには、MATLAB エディターでファイルを開きます。
プログラムをビルドした後に、MAT ファイル testcells.mat
でアプリケーションを実行します。
まず、3 つのセル変数を作成して保存します。
cellvar = {'hello'; [2 3 4 6 8 9]; [2; 4; 5]}; structvar = {'cell with a structure'; patient; [2; 4; 5]}; multicellvar = {'cell with a cell'; cellvar; patient}; save testcells.mat cellvar structvar multicellvar
cellvar
セルの内容の mxArray
型を表示します。
!matreadcell testcells.mat cellvar
0: string 1: numeric class 2: numeric class