MATLABデタ
MATLAB配列
MATLAB®言語が使用可能なオブジェクト型は,唯一,matlab配列のみです。スカラー,ベクトル,行列,文字配列,细胞配列,構造体およびオブジェクトを含むすべてのMATLAB変数は,MATLAB配列として保存されます。C/ c++では,matlab配列はmxArray
型として宣言されます。mxArray
構造体には配列に関する以下の情報が含まれます。
型
次元
配列に関連付けられたデ,タ
数値の場合は,変数が実数か複素数か
スパ,スの場合は,ンデックス,およびゼロ以外の最大要素
構造体またはオブジェクトの場合は,フィ,ルド数とフィ,ルド名
mxArray
構造体にアクセスするには,CまたはFortranの行列APIの関数を使用します。これらの関数により,墨西哥人ファイルのMATLABデータに関する情報を作成し,読み取り,クエリすることができます。移植性の問題を回避し,墨西哥人ソースファイルがすべてのシステムで正しくコンパイルされるように,行列APIではmwSize
型とmwIndex
型を使用しています。
mxArrayのラaapl . exeフサaapl . exeクル
Matlab関数と同じく,mexファ,计算器ルのゲトウェルチンでは参照によってmatlab変数を受け渡します。ただし,これらの引数はcのポンタです。変数への“ポンタ”は,変数の“アドレス”(メモリ内の位置)です。MATLAB関数ではデータ ストレージが自動的に処理されます。データを MEX ファイルに受け渡すときにはポインターを使用します。ポインターは、変数へのアクセスや変数の操作に際して固有の規則に従います。ポインターの操作の詳細は、Kernighan, B. W および D. M. Ritchie 著『The C Programming Language』などのプログラミングの参考書を参照してください。
メモ
変数ではメモリが使用されるので,mexファ超市ルによるmxArray
の作成方法とメモリの解放責任にいて理解しておく必要があります。これはメモリリ,クを回避するために重要です。mxArray
のライフサイクルとメモリ管理の規則は,それが入力引数,出力引数またはローカル変数のいずれであるかに依存します。mxArray
の割り当てを解除するために呼び出す関数は,その作成に使用した関数によって異なります。詳細にいては,C行列APIで配列を作成する関数を検索してください。
入力引数prhs
mxArray
は入力パラメタprhs
を通じてmexファルに引き渡されますが,これはmexファルのスコプ外に存在します。prhs
パラメ,タ,内にあるmxArray
のメモリは解放しないようにしてください。また,変数prhs
は読み取り専用です。米EXファイル内では変更しないでください。
出力引数plhs
mxArray
(メモリ割り当てとデータ作成)を出力引数として作成する場合,そのメモリとデータは墨西哥人ファイルのスコープ外に存在します。出力引数plhs
に返されたmxArray
のメモリは解放しないようにしてください。
ロ,カル変数
mxArray
を作成するために関数mxCreate *
を使用する場合や,mxCalloc
および関連する関数を呼び出す場合には常にメモリを割り当てます。入力引数と出力引数の処理規則を遵守した後、MEX ファイルでは一時的な配列を破棄し、動的に割り当てられたメモリを解放する必要があります。メモリ割り当てを解除するには、mxDestroyArray
またはmxFree
を使用します。使用する関数の詳細にいては,Mx行列ラブラリを参照してください。
デ,タの保存
Matlabは,列優先(列方向)の番号付けスキ,ムでデ,タを保存します。これはFortranが行列を保存する方法です。MATLABは当初 Fortran で作成されたため、この規則を使用します。MATLAB では、最初の列、2 番目の列、という順序で最後の列まで、データ要素が内部的に保存されます。
たとえば,以下の行列を考えてみます。
A = [“房子”;“地板”;“玄关”]
房子地板门廊
次元は,次のとおりです。
大小(一个)
Ans = 3 5
デ,タは以下のように格納されます。
行列がn次元の場合,matlabはn優先の順序でデ,タを表します。たとえば,4
x2
x3.
の次元をも3次元配列を考えます。デタは次のようにメジできます。
ただし,matlabは,内部的にはこの3次元配列のデ,タを次の順序で表します。
一个 |
B |
C |
D |
E |
F |
G |
H |
我 |
J |
K |
l |
米 |
N |
O |
P |
问 |
R |
年代 |
T |
U |
V |
W |
X |
0 |
1 |
2 |
3. |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20. |
21 |
22 |
23 |
関数mxCalcSingleSubscript
はn次元の添字指定により,配列の最初の要素から目的の要素へのオフセットを作成します。
MATLABデタ型
倍精度複素行列
Matlabの最も一般的なデ,タ型は,倍精度の非スパ,ス複素行列です。これらの行列は,双
型で,米
行n
列の次元をもっています。ここで,米
は行数,n
は列数です。デタは,実数部と虚数部が互いに隣接して格納される、インターリーブされた倍精度数のベクトルとして格納されます。このデータへのポインターは巴勒斯坦权力机构
(配列へのポaapl . exe)として参照されます. exe。非複素行列をテストするには,mxIsComplex
を呼び出します。
MATLAB 9.4版本(R2018a)以前は,MATLABは”実数/虚数分離型”格納表現を使用していました。デタは倍精度の数値の 2 つのベクトルとして保存されます。一方のベクトルには実数データ、他方には虚数データが含まれます。このデータへのポインターは、それぞれ公关
(実数デタへのポンタ)およびπ
(虚数デタへのポンタ)と呼ばれます。非複素行列ではπ
が零
となります。ただし,非複素行列をテストするには,mxIsComplex
を呼び出します。
その他の数値行列
MATLABでは,単精度浮動小数点の8、16、32、64ビットの整数が,符号付きと符号なしの両方でサポートされています。
論理行列
逻辑デ,タ型は,論理状態である真正的
または假
を,それぞれ1
と0
の数値を使用して表現します。特定のMATLAB関数や演算子では,逻辑1
または0
を返して,特定の状態が真か偽かを示します。たとえば,(5 * 10) >
というステトメントはlogical値1
を返します。
MATLAB字符
配列
MATLAB字符
配列は,デ,タを符号なしの16ビットの整数として格納します。MATLAB字符
配列をcスタ目录ルの文字列に変換するには,mxArrayToString
を呼び出します。Cスタイルの文字列を字符
配列に変換するには,mxCreateString
を呼び出します。
细胞配列
cell配列はMATLAB配列の集合体で,各mxArray
はセルと呼ばれます。细胞配列を使うと、異なる型の MATLAB 配列を一緒に保存できます。cell 配列は、データ部分にmxArrays
へのポ。このベクトルのメンバ,がセルと呼ばれます。各セルは,別の单元格配列も含め,サポ,トされる任意のデ,タ型を取ることができます。
構造体
1
行1
列の構造体は,1
行n
列のcell配列と同じ方法で保存されます。ここでn
は構造体内のフィ,ルド数です。デタベクトルのメンバーはフィールドと呼ばれます。各フィールドはmxArray
に保存された名前に関連付けられています。
オブジェクト
オブジェクトは,構造体と同じ方法で保存およびアクセスされます。MATLABでは、オブジェクトは登録されたメソッドをもつ名前付き構造体です。MATLAB 以外では、オブジェクトはオブジェクト名を識別する別のクラス名用のストレージを含む構造体です。
多次元配列
任意の型のmatlab配列は多次元になり得ます。整数のベクトルは,各要素が対応する次元のサ。デ,タのストレ,ジ方法は,行列の場合と同じです。
空配列
任意の型のmatlab配列は空になり得ます。空のmxArray
では,少なくとも1の次元がゼロです。たとえば,米
およびn
が0で,巴勒斯坦权力机构
が零
である双
型の倍精度mxArray
は空配列です。
スパ,ス行列
スパス行列にはmatlabの非スパス行列とは異なる格納規則があります。パラメタ巴勒斯坦权力机构
も倍精度数値または逻辑値の配列ですが,この配列には非ゼロのデータ要素のみが含まれます。
また,追加のパラメ,タ,としてnzmax
、红外
、jc
の3があります。これらのパラメ,タ,に対し変数を宣言する場合は,mwSize
型とmwIndex
型を使用します。
nzmax
は,红外
および巴勒斯坦权力机构
の長さを含む整数です。これは,スパ,ス行列の非ゼロ要素の最大数です。红外
は,長さnzmax
の整数配列を指し,巴勒斯坦权力机构
内の対応要素の行@ @ンデックスを含みます。jc
は,長さn + 1
の整数配列を指し,ここでn
は,スパ,ス行列内の列数です。Cでは,mxArray
の最初の要素はesc escンデックスが0となります。配列jc
には列@ @ンデックス情報が格納されます。スパ,ス行列のj
番目の列に非ゼロ要素がある場合,jc [j]
は,j
番目の列にある最初の非ゼロ要素の红外
および,
に対する@ @ンデックスです。ンデックスπ
Jc [j+1] - 1
には,その列の最後の非ゼロ要素が含まれています。スパ,ス行列のj
番目の列で,jc [j]
は先行するすべての列の非ゼロ要素の合計数になります。配列jc
の最後の要素jc [n]
は,スパ,ス行列全体の非ゼロ要素の数であるnnz
と等価です。nnz
がnzmax
より少ない場合,さらにストレ,ジを割り当てなくても追加の非ゼロエントリを配列に挿入できます。
デ,タ型の使用
MATLABでサポートされる任意のクラスまたはデータ型を受け入れるソース墨西哥人ファイル,垫ファイルアプリケーションおよびエンジンアプリケーションをC / c++で作成できます(デタ型を参照)。Fortran では、倍精度のn
行米
列の配列および文字列のみがサポ,トされます。バイナリのC / c++およびFortran墨西哥人ファイルはMATLAB関数と同様に使用します。
注意
MATLABでは,行列ラ,ブラリの创建関数(mxCreateStructArray
など)を使用してC / c++またはFortranで作成されたMATLABデータ構造体の妥当性はチェックされません。無効な構文を使用してMATLABデータ構造体を作成すると,C / c++またはFortranプログラムで予期しない動作が発生する可能性があります。
デ,タ構造体の宣言
Matlab配列の処理にはmxArray
型を使用します。次のステ,トメントでは,myData
という名前のmxArray
を宣言しています。
mxArray * myData;
関数mxCreate *
の1でmyData
の値を定義します。mxCreateNumericArray
、mxCreateCellArray
、mxCreateCharArray
などの関数は配列作成ル,チンとして有効です。たとえば,以下のステ,トメントは,0
に初期化された米
行1
列の浮動小数点mxArray
を割り当てます。
myData = mxCreateDoubleMatrix(m, 1, mxREAL);
C / c++のプログラマは,MATLAB配列内のデータは列優先の順序であることに留意してください(詳しくは,デ,タの保存を参照してください)。mxArray
からデ,タを読み取るには,matlabのmxGet *
配列アクセスル,チンを使用します。
デ,タの操作
mxGet *
配列アクセスル,チンは,mxArray
のデ,タへの参照を取得します。これらのルチンを使用してmexファル内のデタを変更します。各関数は,mxArray
内の特定の情報へのアクセスを提供します。有効な関数には,mxGetDoubles
、mxGetComplexDoubles
、mxGetM
およびmxGetString
があります。これらの関数の多くには対応するmxSet *
ル,チンがあり,配列内の値を変更するために使用できます。
次のステ,トメントは,入力prhs [0]
をcスタescルの文字列缓冲区
に読み取ります。
char *缓冲区;int buflen;int状态;buflen = mxGetN(prhs[0])*sizeof(mxChar)+1;buf = mxMalloc(buflen);status = mxGetString(prhs[0], buf, buflen);
探索
の例
Matlabには,explore.c
というサンプルのソスmexファルが含まれています。このファ▪▪ルは入力変数のデ▪▪タ型を識別します。このソ,スコ,ドサンプルは,matlabroot
走读生/ /墨西哥人例子
にあります。ここで,matlabroot
はシステムの,matlabがンストルされている最上位フォルダを表しています。
メモ
このドキュメンテ,ションでは,フォルダ,パスに関するプラットフォ,ム共通の説明でUnix®の表記規則を使用しています。たとえば,墨西哥人
フォルダ,への全般的な参照は,matlabroot
走读生/ /墨西哥人例子
です。
サンプルの墨西哥人ファイルをビルドするには,まずパス上にある書き込み可能なフォルダーにファイルをコピーします。
拷贝文件(fullfile (matlabroot,“外来的”,“例子”,墨西哥人的,“explore.c”),“。”,“f”)
墨西哥人
コマンドを使用してmexファ超市ルをビルドします。
墨西哥人explore.c-R2018a
以下を入力します。
X = 2;探索(x)
------------------------------------------------ 名称:prhs[0]维度:1 x1类名:双 ------------------------------------------------ ( 1, - 1) = 2
探索
は任意のデ,タ型を受け入れます。以下の例で,探索
を使用してみてください。
探索([1 2 3 4 5]123.45探索({1 2 3 4 5})探索(int8([1 2 3 4 5]){1 2 3 4 5}探索(稀疏(眼(5)))探索(结构体(“名字”,“乔琼斯”,“ext”, 7332))探索(1,2,3,4,5)探索(复杂(3,4))