外部インタフェース/API リファレンス | ![]() ![]() |
MATLAB言語は、単一のオブジェクトタイプ、MATLAB配列についてのみ機能します。スカラ、ベクトル、行列、文字列、セル配列、構造体、オブジェクトを含むすべてのMATLAB変数は、MATLAB配列として格納されます。Cでは、MATLAB配列はタイプmxArray
と宣言されます。mxArray
構造体は、以下の項目を含みます。
データストレージ
すべてのMATLABデータは、列単位で格納されます。これは、Fortranの行列の格納法です。MATLABはもともとFortranで書かれたので、この記述法を用います。たとえば、つぎの行列を考えます。
a=['house'; 'floor'; 'porch'] a = house floor porch
size(a) ans = 3 5
複素倍精度行列
MATLABの最も一般的なデータタイプは、複素倍精度非スパース行列です。これらの行列はタイプdouble
で、行数がm
で列数がn
のときm
行n
列です。データは、1つが実数データを含み、もう1つが虚数データを含む倍精度数からなる2つのベクトルとして格納されます。このデータのポインタは、それぞれpr
(実数データのポインタ)とpi
(虚数データのポインタ)として参照されます。実数のみの倍精度行列は、pi
がNULL
であるものです。
数値行列
MATLABは、他のタイプの数値行列もサポートします。これらは、単精度浮動小数点の数値と符号付きおよび符号なしの8ビット、16ビット、32ビット整数です。データは、倍精度行列と同様の方法で2つのベクトルに格納されます。
MATLAB文字列
MATLAB文字列は、タイプchar
で、虚数データ成分がないことを除けば、符号なし16ビット整数と同様の方法で格納されます。文字列内の各キャラクタは、16ビット ASCII Unicodeとして格納されます。Cと異なり、MATLAB文字列はnullで終了しません。
スパース行列
スパース行列は、MATLABではフル行列とは異なる格納方法をもちます。パラメータpr
およびpi
は、倍精度数からなる配列ですが、3つの付加的なパラメータnzmax
, ir
およびjc
があります。
nzmax
は、ir
, pr
および存在すればpi
の長さを含む整数です。これは、スパース行列内の可能な非ゼロ要素の最大数です。ir
は、pr
およびpi
の対応する要素の行のインデックスを含む長さnzmax
の整数配列です。jc
は、列のインデックスの情報を含む長さN+1
の整数配列です。0
j
N-1
のj
に対して、jc[j]
はj
列目の最初の非ゼロ要素のir
とpr
(と存在すればpi
)のインデックスで、jc[j+1] - 1
は最後の非ゼロ要素のインデックスです。結果として、jc[N]
は行列内の非ゼロ要素数nnz
と等しくなります。nnz
がnzmax
よりも小さい場合、追加のストレージを割り当てずにより多くの非ゼロ要素が配列に挿入されます。セル配列
セル配列は、各mxArray
がセルとして参照されるMATLAB配列の集合です。これにより、異なるタイプのMATLAB配列を一緒に格納することができます。セル配列は、数値行列と同様の方法で格納されますが、データ部分がmxArray
のポインタからなる単一のベクトルを含むことが異なります。このベクトルのメンバはセルと呼ばれます。各々のセルは、サポートされている任意のデータタイプ(セル配列も)でかまいません。
構造体
1行1列の構造体は、1行n列のセル配列と同様の方法で格納されます。ここで、n
は構造体内のフィールド数です。データベクトルのメンバは、フィールドと呼ばれます。各々のフィールドは、mxArray
に格納された名前に関連します。
オブジェクト
オブジェクトは、構造体と同様の方法で格納され、アクセスされます。MATLABでは、オブジェクトは登録された手法をもつ名前付けられた構造体です。MATLAB以外では、オブジェクトはオブジェクト名を識別する付加的なクラス名に対するストレージを含む構造体です。
多次元配列
いくつかのタイプのMATLAB配列は多次元にすることができます。整数からなるベクトルは、各要素が対応する次元のサイズである位置に格納されます。データのストレージは、行列と同様です。
論理配列
複素数でない数値またはスパース配列は、論理配列としてフラグ化することができます。論理配列に対するストレージは、非論理配列に対するストレージと同じです。
空配列
任意のタイプのMATLAB配列を空配列にすることができます。空のmxArray
は、少なくとも1つの次元が0に等しい配列です。たとえば、m
とn
が0で、pr
がNULL
であるタイプdouble
の倍精度mxArray
は空配列です。
![]() | mexスクリプト | Fortranでポインタを渡す | ![]() |