主要内容

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

デ,タは以下のように格納されます。

数据布局是h f p o o o o o r s o c e r h。

行列がn次元の場合,matlabはn優先の順序でデ,タを表します。たとえば,4x2x3.の次元をも3次元配列を考えます。デタは次のようにメジできます。

排列在三个数据页上的字母A-H, I-P和Q-X。

ただし,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ビットの整数が,符号付きと符号なしの両方でサポートされています。

論理行列

逻辑デ,タ型は,論理状態である真正的またはを,それぞれ10の数値を使用して表現します。特定のMATLAB関数や演算子では,逻辑1または0を返して,特定の状態が真か偽かを示します。たとえば,(5 * 10) >というステトメントはlogical値1を返します。

MATLAB字符配列

MATLAB字符配列は,デ,タを符号なしの16ビットの整数として格納します。MATLAB字符配列をcスタ目录ルの文字列に変換するには,mxArrayToStringを呼び出します。Cスタイルの文字列を字符配列に変換するには,mxCreateStringを呼び出します。

细胞配列

cell配列はMATLAB配列の集合体で,各mxArrayはセルと呼ばれます。细胞配列を使うと、異なる型の MATLAB 配列を一緒に保存できます。cell 配列は、データ部分にmxArraysへのポ。このベクトルのメンバ,がセルと呼ばれます。各セルは,別の单元格配列も含め,サポ,トされる任意のデ,タ型を取ることができます。

構造体

11列の構造体は,1n列の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と等価です。nnznzmaxより少ない場合,さらにストレ,ジを割り当てなくても追加の非ゼロエントリを配列に挿入できます。

デ,タ型の使用

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の値を定義します。mxCreateNumericArraymxCreateCellArraymxCreateCharArrayなどの関数は配列作成ル,チンとして有効です。たとえば,以下のステ,トメントは,0に初期化された1列の浮動小数点mxArrayを割り当てます。

myData = mxCreateDoubleMatrix(m, 1, mxREAL);

C / c++のプログラマは,MATLAB配列内のデータは列優先の順序であることに留意してください(詳しくは,デ,タの保存を参照してください)。mxArrayからデ,タを読み取るには,matlabのmxGet *配列アクセスル,チンを使用します。

デ,タの操作

mxGet *配列アクセスル,チンは,mxArrayのデ,タへの参照を取得します。これらのルチンを使用してmexファル内のデタを変更します。各関数は,mxArray内の特定の情報へのアクセスを提供します。有効な関数には,mxGetDoublesmxGetComplexDoublesmxGetMおよび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))

関連するトピック