所有变量的基本mex类型为mxArray
任何对象,如amatrix、元胞数组或结构体,都存储在此基本类型中。mxArray
基本上与Octave值
类inoct文件,因为它充当所有更专业类型的容器。
这个mxArray
结构体至少包含itrepresents变量的名称、维度、类型以及变量是真实的还是复杂的。它还可以包含许多附加字段,具体取决于的类型mxArray
。有许多函数要创建mxArray
结构体,包括mxCreateDoubleMatrix
,mxCreateCellArray
,mxCreatesparse
,和泛型mxCreateNumericArray
.
访问数组中数据的基本函数是mxGetPr
从于mex接口假设复数数组的实部和虚部分别存储,因此存在等效函数mxGetPi
这就得到了神奇的部分。这两个函数都只适用于双精度矩阵。通用函数mxGetData
和mxGetImagData
对所有矩阵类型执行相同的操作。例如
mxArray*m;mwSize*dims;UINT32_T*pr;dims=(mwSize*)mxMalloc(2*sizeof(mwSize));dims[0]=2;dims[1]=2;m=mxCreateNumericArray(2,dims,mxUINT32_CLASS,mxREAL);pr=(UINT32_T*)mxGetData(m);
还有一些函数mxSetPr
等,执行相反操作,并将数组的数据设置为使用的参数所指向的内存块mxSetPr
.
注意类型mwSize
上面使用的,以及mwIndex
,定义为在构建themex文件的平台上,Octave中索引的本机精度。这允许32位和64位平台都支持mex文件。mwSize
用于定义数组维度和元素的最大数量,而mwIndex
用于定义数组中的索引。
文件给出了一个示例,演示如何使用任意实数或复数双精度数组mypow2.c如下所示。
#include“mex.h”voidmexFunction(int nlhs,mxArray*plhs[],int nrhs,const mxArray*prhs[]){mwSize n;mwIndex i;double*vri,*vro;if(nrhs!=1||!mxIsDouble(prhs[0]))mexErrMsgTxt(“ARG1必须是double矩阵”);n=mxGetNumberOfElements(prhs[0]);plhs[0]=mxCreateNumericArray(mxGetNumber OfDimensions(prhs[0]),mxGetDimensions prhs[0]),mxIsComplex(prhs[0]vri[i]*vii[i];}}其他{对于(i=0;i<n;i++)vro[i]=vri[i][i]*vri[i],}}
它的使用示例是
b=randn(4,1)+1i*randn(4,1);所有(b.^2==mypow2(b))⇒ 1.
上面的例子使用了函数mxGetDimensions
,mxGetNumberOfElements
和mxGetNumberOfDimensions
以处理多维数组的维度。函数mxGetM
和mxGetN
也可用于找到a2-D矩阵(MxN矩阵)中的行和列的数量。
版权所有 © 2024 Octave中文网
ICP备案/许可证号:黑ICP备2024030411号