配列の受け渡し例
関数 print2darray
shrlibsample
ライブラリの関数 print2darray
は、2 次元配列の値を 3 つの列と可変数の行で表示します。my2d
パラメーターは double
の 2 次元配列です。len
パラメーターは行数です。
EXPORTED_FUNCTION void print2darray(double my2d[][3],int len) { int indxi,indxj; for(indxi=0;indxi<len;++indxi) { for(indxj=0;indxj<3;++indxj) { mexPrintf("%10g",my2d[indxi][indxj]); } mexPrintf("\n"); } }
MATLAB 配列の C スタイルの次元への変換
この例では、MATLAB® 配列に列単位で保存されたデータを、「行 x 列」の形式を想定する C 関数に渡す方法を説明します。
関数 print2darray
を含むライブラリを読み込みます。
if not(libisloaded('shrlibsample')) addpath(fullfile(matlabroot,'extern','examples','shrlib')) loadlibrary('shrlibsample') end
4 行 3 列の MATLAB 配列を作成します。
m = reshape(1:12,4,3)
m = 4×3
1 5 9
2 6 10
3 7 11
4 8 12
値を表示します。最初の列は [1 2 3 4] ではなく、[1 4 7 10] になっています。
calllib('shrlibsample','print2darray',m,4)
1 2 3 4 5 6 7 8 9 10 11 12
目的の結果を得るために、m
を転置します。
calllib('shrlibsample','print2darray',m',4)
1 5 9 2 6 10 3 7 11 4 8 12
関数 multDoubleArray
shrlibsample
ライブラリの関数 multDoubleArray
は、配列の各要素に 3 を乗算します。この関数では、単独の添字 (線形インデックス付け) を使用して入力配列内を移動します。
EXPORTED_FUNCTION void multDoubleArray(double *x,int size) { /* Multiple each element of the array by 3 */ int i; for (i=0;i<size;i++) *x++ *= 3; }
MATLAB® 関数シグネチャは次のとおりです。
戻り値の型 | 名前 | 引数 |
---|---|---|
doublePtr | multDoubleArray | (doublePtr, |
3 次元 MATLAB 配列の保持
この例では、C 関数が MATLAB® 配列の次元を変化させるやり方と、その形状を復元する方法を説明します。
ライブラリを読み込みます。
if not(libisloaded('shrlibsample')) addpath(fullfile(matlabroot,'extern','examples','shrlib')) loadlibrary('shrlibsample') end
2×5×2 の入力配列を作成し、その次元を表示します。
vin = reshape(1:20,2,5,2); vs = size(vin)
vs = 1×3
2 5 2
multDoubleArray
を呼び出して各要素を乗算します。出力の次元を表示します。
vout = calllib('shrlibsample','multDoubleArray',vin,20); size(vout)
ans = 1×2
2 10
元の形状を復元します。
vout = reshape(vout,vs); size(vout)
ans = 1×3
2 5 2