Matlab调用C/C——matlab向C++传数组

来源:互联网 发布:mac win启动U盘 编辑:程序博客网 时间:2024/06/05 00:41

解析matlab数组和C++数组的区别:
(1)matlab可以不用声明,直接使用;C++使用前必须声明。
(2)matlab数组下标从1开始;C++数组下标从0开始。
(3)matlab数组是列优先;C++数组行优先。


二维数组:

void mexFunction( int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]){    double *a_ptr;    const int  *dim_array;    int number_of_dims;        a_ptr=mxGetPr(prhs[0]);    number_of_dims = mxGetNumberOfDimensions(prhs[0]); //获取维数    dim_array = mxGetDimensions(prhs[0]);  //维数数组        //二维可以用 mxGetM, mxGetN,获得矩阵的行数和列数    int numARows = *dim_array;    int numACols = *(dim_array+1);    printf("%d %d  \n",numARows,numACols);    int i,j,k;    printf("%f\n", a_ptr[0]);    //打印数据    for (i=0;i<numARows; i++)    {        for (j=0; j<numACols; j++)        {            printf("%f ", a_ptr[j*numARows+i]);        }        printf("\n");    }}

结果输出:



三维数组:

#include "mex.h"void mexFunction( int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]){    double *a_ptr;    const int  *dim_array;    int number_of_dims;        a_ptr=mxGetPr(prhs[0]);    number_of_dims = mxGetNumberOfDimensions(prhs[0]); //获取维数    dim_array = mxGetDimensions(prhs[0]); //维数数组            int numARows = *dim_array; //行数    int numACols = *(dim_array+1); //列数    int numALays = *(dim_array+2); //第三维        printf("%d %d %d \n",numARows,numACols,numALays);    int i,j,k;        printf("%f\n", a_ptr[0]);        //打印数据    for(k=0; k<numALays; k++)    {        for (i=0;i<numARows; i++)        {            for (j=0; j<numACols; j++)            {                //matlab的数组标号与C++的数组编号的对应                printf("%f ", a_ptr[numARows*numACols*k+j*numARows+i]);            }            printf("\n");        }    }}

输出结果:


0 0
原创粉丝点击