传递数组示例
print2darray 函数
shrlibsample 库中的 print2darray 函数显示列数为三、行数可变的二维数组的值。参数 my2d 是 double 类型的二维数组。参数 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® 数组中按列存储的数据传递给采用行×列格式的 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 4 7 10] 而不是 [1 2 3 4]。
calllib('shrlibsample','print2darray',m,4)
1 2 3
4 5 6
7 8 9
10 11 12
ans = 4×3
1 5 9
2 6 10
3 7 11
4 8 12
转置 m 以获得所需的结果。
calllib('shrlibsample','print2darray',m',4)
1 5 9
2 6 10
3 7 11
4 8 12
ans = 3×4
1 2 3 4
5 6 7 8
9 10 11 12
multDoubleArray 函数
shrlibsample 库中的 multDoubleArray 函数将数组中的每个元素乘以三。该函数使用单一下标(线性索引)来导航输入数组。
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, |
保留三维 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